不能停止服务

时间:2016-10-23 18:50:54

标签: android android-service

我有两个浮动操作按钮,其中一个用于启动自动更改壁纸的服务,另一个应该停止服务。但问题是,启动服务的那个,运行正常,但用于停止它的那个中的stopService()方法不起作用。

这两个按钮是: -

blueShapes=[]
for i in range(imageData.shape[0]):
    if not (np.isreal(imageData.loc[i,'background_color'])):
        if imageData.loc[i,'background_color'].upper()=='BLUE':
            blueShapes.append(i)

扩展服务的类如下: -

startService.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            AsyncTask asyncTask= new AsyncTask() {
                @Override
                protected Object doInBackground(Object[] objects) {
                    File folder = new File(Environment.getExternalStorageDirectory() + File.separator + "WallR"+ File.separator + "Gallery");
                    if(folder.exists()) {
                        File[] listOfFiles = folder.listFiles();
                        if (listOfFiles.length != 0) {
                            getActivity().startService(intent);
                        }
                    }
                    return null;
                }
            };
            asyncTask.execute();
            Toast.makeText(getContext(),"Automatic Wallpaper changer enabled",Toast.LENGTH_SHORT).show();
        }
    });






stopService.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            AsyncTask asyncTask= new AsyncTask() {
                @Override
                protected Object doInBackground(Object[] objects) {
                            getActivity().stopService(intent);
                    return null;
                }
            };
            asyncTask.execute();
            Toast.makeText(getContext(),"Automatic Wallpaper changer disabled",Toast.LENGTH_SHORT).show();
        }
    });

请帮忙。提前谢谢。

2 个答案:

答案 0 :(得分:0)

尝试取消TimerTask中的onDestroy()。你永远不会阻止TimerTask执行。

答案 1 :(得分:0)

首先,您不需要AsyncTask来启动/停止服务。 其次,你通过意图开始服务,你基本上不使用。
我会尝试通过ServiceConnection访问该服务,并且在想要停止服务的那一刻,首先停止计时器,通过ServiceConnection访问它(你必须阅读它 - 它在Android服务的官方页面上)然后是服务本身。我推荐的步骤是:
*使用ServiceConnection启动服务,所有这些都在一个单独的类中 *在onConnected回调到来之后,将服务实例存储在单独的类中。
*通过服务的公共方法启动计时器。
*通过服务的公共方法停止计时器。
*如果您想通过活动停止服务。

如果您需要通知UI,活动等,请使用从Activity到负责启动/停止服务的类的回调。 类似于开头的东西:

ServiceConnection.onServiceConnected() and startService()

然而,在上面的代码中,他将Service逻辑放入活动中,我主要建议创建一个单独的类,并使用从单独的类到活动的回调来进行通信。