0

問題は、アクティビティからTaskTimerApplication.TESTにアクセスするとき、それはまだ「作成」であるが、サービスでは本来あるべき「変更」であるということです。アクティビティがデータにアクセスする前に、サービスがコードを実行していることを100%確認しました。以下は、問題をより明白な方法で提示する簡単なテストシナリオです。

アプリケーションコード:

public class TaskTimerApplication extends Application {
    // Static properties
    private static final String TAG = "Application";
    public static final boolean DEBUG = true;
    public static String TEST = "Declaration";

    @Override
    public void onCreate() {
        super.onCreate();
        TEST = "Creation";
        Log.v(TAG, "Created");
    }
}

サービスコード:

public class TaskService extends Service {
    public static final String TAG = "TaskService";

    @Override
    public void onCreate() {
        TaskTimerApplication.TEST = "Modification";
        Log.d(TAG, TaskTimerApplication.TEST);
    }
}

私の完全な非テストコードは、私のGitHubプロジェクトで見ることができます。完全なコードでは、TASKS ArrayListはアクティビティでは空のままですが、サービスでは適切に入力されます。

4

1 に答える 1

2

あなたの問題はあなたのマニフェストにあります:

<service android:description="@string/service_description" android:name=".TaskService" android:label="@string/service_label" android:process=":TaskService"></service>

通常、サービスを別のプロセスに配置してRAMとCPUを浪費する正当な理由はありません。さらに、サービスを別のプロセスに配置すると、アクティビティとサービスは同じプロセスに含まれないため、共通のApplicationオブジェクトインスタンスを共有しなくなります。

android:process属性を削除することをお勧めします。

于 2013-03-04T22:04:23.500 に答える