android - 完成工作后如何停止服务?

标签 android multithreading service

我有一个从我的 Activity 开始的服务。 现在服务通过从 onStartCommand() 启动一个新线程来执行一些任务 我想在线程完成其工作后停止服务。

我试过使用这样的处理程序

  public class MainService extends Service{

    private Timer myTimer;
    private MyHandler mHandler;


    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        mHandler = new MyHandler();
        myTimer = new Timer();
        myTimer.schedule(new MyTask(), 120000);
        return 0;
    }

    private class MyTask extends TimerTask{

        @Override
        public void run() {
            Intent intent = new Intent(MainService.this, MainActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
            mHandler.sendEmptyMessage(0);
        }

    }

    private static class MyHandler extends Handler{
        @Override
        public void handleMessage(Message msg) {            
            super.handleMessage(msg);
            Log.e("", "INSIDE handleMEssage");
            //stopSelf();
        }
    }

首先它警告我,如果处理程序类不是静态的,它将导致泄漏 我把它设为静态后,就不能调用 stopSelf(),因为它是非静态的。

我的方法正确还是有更简单的方法?

最佳答案

你应该使用 IntentService 而不是服务。它在单独的线程中自动启动,并在任务完成时自行停止。

public class MyService extends IntentService {

    public MyService(String name) {
        super("");
    }

    @Override
    protected void onHandleIntent(Intent arg0) {

        // write your task here no need to create separate thread. And no need to stop. 

    }

}

关于android - 完成工作后如何停止服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23821603/

相关文章:

java - 在 Android 上停止服务

android - Android 上的 jWebSocket 客户端无法连接到本地服务器

android - 金立 E7 mini 未列出 adb 设备

Python多功能多线程与threading.Thread? (线程数可变)

android - NotifyDatasetChanged 从服务 Android

android - Android 中 Service、Web 和 Activity 之间的来回通信

java - 具有 GSON 的 Android Volley 库无法将数据设置为 POJO 类

android - 崩溃应用程序时获取事件触发器

java - android中调用AsyncTask.cancel(true)时AsyncTask不会立即调用 `onCancelled`

c++ - 多个线程访问共享资源