我似乎无法停止自己的服务



我有一项服务,该服务在屏幕上放置一个红色矩形,并且有一个看起来像

的ondestroy()
@Override
    public void onDestroy() {
      Toast.makeText(this, "service done", Toast.LENGTH_SHORT).show(); 
}

我打电话给我的一项活动,以杀死这项服务:

 stopService(new Intent(this, assNavOverrideService.class));

我看到吐司出现,说ondestroy()已被打电话给我,但我仍然看到红色矩形,它仍在运行。

我的清单正在使用:

<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" >

myService

public class assNavOverrideService extends Service {
    Timer timer;
    WindowManager.LayoutParams handleParams;
    View screenBlock;
    View disableStatusBar;
    WindowManager winMgr;
    @Override
    public void onCreate() {
        winMgr = (WindowManager)getSystemService(WINDOW_SERVICE); 
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        disableStatusBar = new TableLayout(getApplicationContext());
        handleParams = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.FILL_PARENT,
                50, 
                WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
                 // this is to keep button presses going to the background window
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
                WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH |
                 // this is to enable the notification to recieve touch events
                WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
                 // Draws over status bar
                WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
                PixelFormat.TRANSPARENT);
         handleParams.gravity = Gravity.TOP;
         handleParams.y = 750;
         disableStatusBar.setBackgroundResource(R.drawable.fake_nav);
         winMgr.addView(disableStatusBar, handleParams);
         timer = new Timer();
         uiCheckTask tTask = new uiCheckTask();
         tTask.setService(this);
         timer.schedule(tTask, 50, 10);
        // If we get killed, after returning from here, restart
         return START_REDELIVER_INTENT;
    }
    @Override
    public IBinder onBind(Intent intent) {
        // We don't provide binding, so return null
        return null;
    }
    @Override
    public void onDestroy() {
      Toast.makeText(this, "service done", Toast.LENGTH_SHORT).show(); 
    }

    class uiCheckTask extends TimerTask {
        Boolean secDialog = false;
        assNavOverrideService myService;

       public void setService(assNavOverrideService mS){
           myService = mS;
       }

        public void run() {
                Log.v("TICK","TOCKKKKKKKKKKK");

        }

    }

}

首先,您无需获得该许可即可停止创建的服务。我经常使用服务(启动和停止),我向您保证,我永远不会使用该许可。

IE:

Intent service = new Intent(myContext,Service.class);
    
    
    startService(service);
    
    
    stopService(service);

是您所需要的。

当然,您的服务确实需要在您的Android清单中声明。

现在任何影响您活动的事物都使用该活动内部的上下文。因此,杀死您的服务不会改变UI上的内容。在您的销毁服务中,您应该以某种方式引用矩形对象并以这种方式删除。

我不知道您是如何创建矩形的。但是,如果是视图,您可以将其设置为可见性。

如果您说的服务即使在调用停止服务功能之后仍在运行,那么其他问题是错误的。即使您看起来正确停止服务。

态------------------------------------------------------------------------------------------------------------------------------------您的服务也可能绑定到您的活动。如果要这样做,则需要发布绑定。

这是一个类似问题的链接:

我希望这对您有帮助!欢呼

已解决,在我服务的onDestroy()中,我必须停止计时器任务,然后关闭服务...

最新更新