线程运行中的处理程序

时间:2010-08-22 18:18:56

标签: android

我是android的新手,请耐心等待。

我有一个TimerTask,我在服务中定义了run()。在run()中,我正在调用

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
    LOCATION_UPDATES_MIN_TIME_MS, LOCATION_UPDATES_MIN_DISTANCE_M, gpsListener);

它抱怨无法创建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();
        }
    };

以及之后的预定如下:

locationTimer = new Timer();
  locationTimer.schedule(locationTask, 10000, cmds.getAlertInterval()*60);

当调用.start时,requestLocationUpdates()失败

2 个答案:

答案 0 :(得分:4)

您需要在具有looper的线程内调用requestLocationUpdates,即最好是主线程。 (requestLocationUpdates本身很快,不会阻塞,所以这样做没有羞耻感。)

如果您的应用程序的编写方式无法阻止您这样做,则可以使用处理程序。 文档中有一个示例,应该完全符合您的需求:http://developer.android.com/resources/articles/timed-ui-updates.html

或者,您可以使用此指令创建Runnable并在其上调用Activity.runOnUiThread()

答案 1 :(得分:1)

我经历过类似的情况,我无法收到位置更新,将LocationListener与我自己的Threads(使用Looper)/ HandlerThreads混合在一起。解决方案是使用PendingIntent和requestLocationUpdates(provider,minTime,minDistance,intent)。看看:How to receive location updates without using a service