Chr*_*son 8 android locationlistener
当在我的应用程序中进行此回调时,我有很多工作要做(通过ORM lib读取和写入SQL db以及一些基于距离的计算).当然,我担心不会阻塞主UI线程所以我一直在尝试(不成功)找出这是否是进行回调的线程.如果是,我打算在回调发生时触发的AsyncTask上完成上述所有工作.同样的AsyncTask也将从2个独立的活动类中接收事件.(响应用户输入等..)
我在这个回调周围发现的很多讨论似乎是基于人们试图改变实际收到回调的线程.这对我来说毫无意义.当然,平台确定了这个回调的上下文,并且在收到它时要做的明智的事情是将任何严肃的工作卸载到另一个线程上,AsyncTask似乎是合适的.
如果有人可以概述他们在这里使用的成功模式,那将非常有用.
根据Android参考文档LocationManager:
调用线程必须是Looper线程,例如调用Activity的主线程.
这意味着初始化回调的Thread必须是主线程或Looper线程.
我发现处理这个的最好方法是OnLocationChanged在主线程上注册一个接收器.然后,在我的回调中,我将创建一个Runnable发送到后台线程,在那里我将执行任何长时间运行的任务(比如写入数据库).
ExecutorService mThreadPool = Executors.newSingleThreadExecutor();
@Override
public void onLocationChanged(Location location) {
mThreadPool.execute(new Runnable() {
@Override
public void run() {
// Perform your long-running tasks here.
//...
}
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3199 次 |
| 最近记录: |