如何以编程方式强制停止android服务

时间:2019-05-01 01:11:26

标签: java android android-service

我使两个按钮一个开始服务,另一个使它停止 当我按停止按钮时,通知我服务已停止,但实际上它仍在后台运行 我在onStartCommand()方法中使用计时器,每秒重复一次 是这个原因吗?以及如何强制立即停止服务。

public int onStartCommand(Intent intent, int flags, int startId) {
    Toast.makeText(getApplicationContext(),"start..",Toast.LENGTH_SHORT).show();
    new Timer().scheduleAtFixedRate(new TimerTask() {

        private Handler handler = new Handler(){
            @Override
            public void dispatchMessage(Message msg) {
                Toast.makeText(getApplicationContext(),""+(counter+=1),Toast.LENGTH_SHORT).show();
            }
        };
        @Override
        public void run() {
            handler.sendEmptyMessage(0);
        }
    },0,1000);


    return START_STICKY;
}

`

和我的按钮动作:-

public void btnStart(View view){

    startService(new Intent(MainActivity.this,MyService.class));

}
public void btnStop(View view){

   stopService(new Intent(MainActivity.this,MyService.class));
}

我找到了答案..! 答案是必须取消onDestroy方法

中的timer和timerTask

2 个答案:

答案 0 :(得分:0)

如果您打算停止服务,则应调用stopService(Intent) 例如:

Intent intent = new Intent(MainActivity.this, YourService.class);
stopService(intent);

答案 1 :(得分:0)

这是有关如何停止服务的简化说明:

stopSelf()用于始终停止当前服务。

stopSelf(int startId)也用于停止当前服务,但前提是startId是上次启动服务时指定的ID。

stopService(Intent service)用于停止服务,但是从服务外部停止。

访问此link以获得更多详细信息

请替换

return START_STICKY;

通过

return START_NOT_STICKY;

差异:

START_STICKY

系统被杀死后将尝试重新创建服务

START_NOT_STICKY

系统被杀死后将不会尝试重新创建服务