应用程序上的属性不在服务和活动之间持久存在

时间:2013-03-04 21:39:17

标签: android android-activity android-service

问题是当从活动访问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 project可以看到完整的非测试代码。在完整代码中,TASKS ArrayList在活动中保持为空,但在服务中正确填充。

1 个答案:

答案 0 :(得分:2)

你的问题出在你的清单上:

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

通过将服务放在单独的进程中,通常没有充分的理由浪费RAM和CPU。此外,如果您确实将服务放在一个单独的进程中,那么您的活动和服务将不在同一个进程中,因此不会共享一个共同的Application对象实例。

我的建议是删除android:process属性。