0

问题是当从 Activity 访问 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 回答