我有两个浮动操作按钮,其中一个用于启动自动更改壁纸的服务,另一个应该停止服务。但问题是,启动服务的那个,运行正常,但用于停止它的那个中的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();
}
});
请帮忙。提前谢谢。
答案 0 :(得分:0)
尝试取消TimerTask
中的onDestroy()
。你永远不会阻止TimerTask
执行。
答案 1 :(得分:0)
首先,您不需要AsyncTask来启动/停止服务。
其次,你通过意图开始服务,你基本上不使用。
我会尝试通过ServiceConnection访问该服务,并且在想要停止服务的那一刻,首先停止计时器,通过ServiceConnection访问它(你必须阅读它 - 它在Android服务的官方页面上)然后是服务本身。我推荐的步骤是:
*使用ServiceConnection启动服务,所有这些都在一个单独的类中
*在onConnected回调到来之后,将服务实例存储在单独的类中。
*通过服务的公共方法启动计时器。
*通过服务的公共方法停止计时器。
*如果您想通过活动停止服务。
如果您需要通知UI,活动等,请使用从Activity到负责启动/停止服务的类的回调。
类似于开头的东西:
ServiceConnection.onServiceConnected() and startService()
然而,在上面的代码中,他将Service逻辑放入活动中,我主要建议创建一个单独的类,并使用从单独的类到活动的回调来进行通信。