在我的应用程序中,我有多个地方可以调用 AsyncTask 以连接到 Web、下载内容等。它可以来自 Activity 或来自后台服务。
存在各种问题,因为我正在读取和写入 SQLite 数据库,并且当多个任务在类似操作上重叠时(假设 GetMail 在后台运行并且用户手动启动它)。
我想同步这些任务的类型并编写这样的代码。我不知道如何测试它,它似乎运行正常,但我想得到你的意见,如果它是有效的..
public enum AsyncTasks
{
GetMail,
PostMail,
}
public class MyApplication extends Application
{
private final ArrayList<AsyncTasks> mLockedAsyncTasks = new ArrayList<AsyncTasks>();
public boolean lockAsyncTask(AsyncTasks task)
{
synchronized (mLockedAsyncTasks)
{
if (!mLockedAsyncTasks.contains(task))
{
mLockedAsyncTasks.add(task);
return true;
}
return false;
}
}
public void unlockAsyncTask(AsyncTasks task)
{
synchronized (mLockedAsyncTasks)
{
if (mLockedAsyncTasks.contains(task))
{
mLockedAsyncTasks.remove(task);
}
}
}
}
这里的想法是我正在打电话lockAsyncTask
,如果成功 - 我继续 HTTP 的东西,否则跳过,因为它已经在运行。