【问题标题】:Syncronizing tasks in Android在 Android 中同步任务
【发布时间】:2012-07-26 18:12:49
【问题描述】:

在我的应用程序中,我有多个地方可以调用 AsyncTask 来连接网络、下载内容等。它可以来自 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 内容,否则跳过,因为它已经在运行。

【问题讨论】:

    标签: java android asynchronous


    【解决方案1】:

    仅使用由单个工作线程支持的操作队列可能更容易。这样,所有任务都将按照收到的顺序运行。您可以使用Executors 工厂方法轻松完成此操作。这是一个简单的例子:

    private static final ExecutorService mThreadPool =
            Executors.newSingleThreadExecutor();
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        mThreadPool.execute(new Runnable() {
            public void run() {
                // Do some work here...
            }
        });
    
        mThreadPool.execute(new Runnable() {
            public void run() {
                // Do some additional work here after
                // the first Runnable has finished...
            }
        });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-26
      • 1970-01-01
      • 2016-07-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多