我是android的新手,请耐心等待.
我有一个TimerTask,我在服务中定义了run().在run()中,我正在打电话
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
LOCATION_UPDATES_MIN_TIME_MS, LOCATION_UPDATES_MIN_DISTANCE_M, gpsListener);
Run Code Online (Sandbox Code Playgroud)
它抱怨无法创建Handler,因为我相信它是一个后台线程.我该如何解决?
编辑:代码段
locationTask = new TimerTask() {
@Override
public void run() {
Log.d(Commands.TAG, "Running location Task");
myLocationProvider = new MyLocationProvider(locationManager, handler, MyService.this);
myLocationProvider.start();
myLocationProvider.stop();
}
};
Run Code Online (Sandbox Code Playgroud)
以及它的预定如下:
locationTimer = new Timer();
locationTimer.schedule(locationTask, 10000, cmds.getAlertInterval()*60);
Run Code Online (Sandbox Code Playgroud)
当调用.start时,requestLocationUpdates()失败
您需要从带有循环器的线程(即最好是主线程)内调用 requestLocationUpdates。(requestLocationUpdates 本身很快并且不会阻塞,因此这样做并不可耻)。
如果您的应用程序的编写方式只是阻止您这样做,则可以使用处理程序。该文档有一个示例,应该几乎正是您所需要的:http://developer.android.com/resources/articles/timed-ui-updates.html
或者,您可以使用此指令创建一个 Runnable 并调用Activity.runOnUiThread()它。
| 归档时间: |
|
| 查看次数: |
3505 次 |
| 最近记录: |