问题是当从活动访问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在活动中保持为空,但在服务中正确填充。
答案 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
属性。