0

シングルトンオブジェクトを使用してアプリケーションを作成するコードを書いています。いつ発売されるか、

  1. 問題は、アプリケーションを起動するときです。オブジェクトが1つ作成され、戻るボタンを押すとアプリケーションが閉じます。そして、ホームボタンを長押しして再度アプリケーションを起動すると、別のオブジェクトが作成されます。

  2. アイコンをクリックしてアプリケーションを再度起動すると、別のオブジェクトが生成されます。

しかし、ホームボタンを押してアプリケーションから出て、ホームボタンを長押ししてアプリケーションを起動してアプリケーションに戻ると、新しいオブジェクトは作成されません。

アクティビティコード:

package com.gmmusic.test;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class GmmusicActivity extends Activity
{
    /** Called when the activity is first created. */
    private static String TAG = "GmmusicActivity";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Log.i(TAG, "Created instance#"+ MyMainApplication.getInstance().count());
    }
}

シングルトンコード:

package com.gmmusic.test;

import android.app.Application;
import android.util.Log;

public class MyMainApplication extends Application {

    private static String TAG = "MyMainApplication";

    private static MyMainApplication singleton;

    public static MyMainApplication getInstance() {
        return singleton;
    }

    private int count = 0;
    private int count1=0;
    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();

        singleton = this;
        Log.i(TAG, "Singleton created");
        System.out.println("count1 >> "+count1);
        count1++;
    }

    public int count() {
        return count++;
    }
}
4

2 に答える 2

0

Serializeable を実装するクラスを作成できます。

class Person implements Serializeable
    String name;
    public Person(String name){
        this.name = name;
    }
}

別のインテントがある場合は、それを渡すことができます。このアクティビティを閉じると、次のように結果を取得できます

Person p = new Person("Oliver");
Intent i = new Intent()
i.setClass(this, NextActivity.class);
i.putExtra("person", p);
startActivityForResult(i,1) // 1 is ResultCode

次に、他のアクティビティで、たとえば onCreate でこのオブジェクトを取得できます。

protected void onCreate(Bundle savedInstanceState) {
     Log.d(TAG, "onCreate");
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_next);
     Person p = (Person) getIntent().getSerializableExtra("person");
     // The same string as in first_activity
}

このすべての後、同じオブジェクトでやりたいことは何でもできます。最初のアクティビティに戻りたい場合は、アクティビティからの結果の取得をお読みください。

于 2013-01-18T20:29:26.347 に答える
0

この動作を処理する最善の方法は、アクティビティのランチ モード属性をマニフェスト ファイルでカスタマイズすることです。アプリケーションに応じて、おそらく SingleTop または SingleInstance に設定します。ドキュメントを参照してください: Doc

于 2013-01-26T10:22:31.450 に答える