停止服务在android上不起作用

时间:2011-10-10 13:21:40

标签: android service

我是Android新手,我有一个使用后台服务的应用程序。 我想点击按钮开始/停止服务,我这样做:

case R.id.enablepop:
        if (!(pop.runningFlag))
            startService(new Intent(mainScreen,PopUpService.class));
        return true;
case R.id.disablepop:
        if (pop.runningFlag)
                stopService(new Intent(mainScreen,PopUpService.class));
        return true;

在服务的onStart()函数中,我有runningFlag,我设置为“true”,然后我创建一个在runningFlag为true时工作的线程。 我在onDestroy()上将runningFlag设置为false。

问题是该服务不会停止。有人可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

尝试使用Handler,就像在这里一样,你可以像Thread一样使用Handler。

这是示例

import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;

public class MyService extends Service{
    private Handler handler;
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        handler = new Handler();
    }

    @Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);
        handler.post(updateStatus);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        handler.removeCallbacks(updateStatus);
        handler = null;
    }

    @Override
    public boolean onUnbind(Intent intent) {
        handler.removeCallbacks(updateStatus);
        handler = null;
        return super.onUnbind(intent);
    }

    private Runnable updateStatus = new Runnable() {
        @Override
        public void run() {
            // do something here
            handler.postDelayed(updateStatus, 1000);
        }
    };
}

这里处理程序可以初始化为oncreate方法,此后调用onStart方法然后将通过handler.post()调用updateStatus对象,这将启动此Runnable对象的run方法。

现在在这里,这将立即调用run()并立即执行语句,以便在此方法内重复此任务调用特定的延迟时间,如此处1000毫秒所以在完成所有执行后它将再次调用1秒后重复此任务,这将继续,直到你无法从处理程序中删除runnable对象,所以基本上是调用onDestroy()