Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我似乎无法停止自己的服务_Android_Android Service - Fatal编程技术网

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

Android 我似乎无法停止自己的服务,android,android-service,Android,Android Service,我有一个服务,它在屏幕上放置一个红色矩形,并有一个如下所示的onDestroy() @Override public void onDestroy() { Toast.makeText(this, "service done", Toast.LENGTH_SHORT).show(); } 从我的一项活动中,我打电话来终止此服务,如下所示: stopService(new Intent(this, assNavOverrideService.class)); 我看到祝

我有一个服务,它在屏幕上放置一个红色矩形,并有一个如下所示的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" >

首先,停止您创建的服务不需要该权限。我经常使用服务(启动和停止),我向您保证我从未使用过该权限

即:

这就是你所需要的

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

现在,任何影响活动的内容都会使用该活动中的上下文。因此,终止您的服务不会改变UI上的内容。在Destroy上的服务中,您应该需要以某种方式引用矩形对象并以这种方式将其删除

我不知道你是如何创建矩形的。但如果它是一个视图,可以将其设置为VISIBILITY.GONE,或者如果它是一个ViewStub,可以将其放气,如果它是一个对象,可以将其清除,等等

如果您说即使在调用停止服务功能后,您的服务仍在运行,则说明其他问题。即使看起来您正在正确停止服务

-----------------------------编辑---------------------------------------------------------------------------------------------------------- 您的服务也可能绑定到您的活动。如果要执行此操作,则需要释放绑定

类似问题的链接:

我希望这对你有帮助!
欢呼声

解决了,在我的服务的
onDestroy()
中,我不得不停止计时器任务,然后服务关闭

当我得到有效的答案时,我会接受。。拜托,我只是告诉你,有些人(像我一样)会跳过这些问题。5个问题中的50%是完全可以的,但75个问题中的50%不是那么好。我只是不想把我的时间和精力花在第76名上。只是一个注释-做你想做的,但可能你问的问题是错误的,不清楚的方式?矩形是在一个系统覆盖中,由服务在服务的oncreate方法中绘制。我应该提到,该服务还启动了一个内联类计时器任务抱歉,我的意思是它在onStartI中绘制了系统覆盖。我没有调用bindService()。它可能是绑定本身吗?因为我没有手动将它绑定到任何东西
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");


        }



    }



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