线程运行中的处理程序

Tar*_*nfx 6 android

我是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()失败

Ebo*_*ike 4

您需要从带有循环器的线程(即最好是主线程)内调用 requestLocationUpdates。(requestLocationUpdates 本身很快并且不会阻塞,因此这样做并不可耻)。

如果您的应用程序的编写方式只是阻止您这样做,则可以使用处理程序。该文档有一个示例,应该几乎正是您所需要的:http://developer.android.com/resources/articles/timed-ui-updates.html

或者,您可以使用此指令创建一个 Runnable 并调用Activity.runOnUiThread()它。