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

Noa*_*med -1 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;
}
Run Code Online (Sandbox Code Playgroud)

`

和我的按钮操作:-

public void btnStart(View view){

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

}
public void btnStop(View view){

   stopService(new Intent(MainActivity.this,MyService.class));
}
Run Code Online (Sandbox Code Playgroud)

我找到答案..!答案是必须在onDestroy方法中取消timer和timerTask

ism*_*oui 5

以下是如何停止服务的简单描述:

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

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

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

访问此链接了解更多详情

请更换

return START_STICKY;
Run Code Online (Sandbox Code Playgroud)

经过

return START_NOT_STICKY;
Run Code Online (Sandbox Code Playgroud)

不同之处:

START_STICKY

系统将在您的服务被终止后尝试重新创建它

START_NOT_STICKY

系统不会在您的服务被终止后尝试重新创建它