我正在使用服务将图片上传到服务器上,取消按钮就可以取消上传,但问题是当我点击取消按钮时,我调用了stopService()
,然后是{{1}执行的方法。但仍然继续上传......我想知道这是怎么发生的?我是一个初学者,我知道在onDestroy
调用后该服务将被销毁,那么这是怎么回事?任何人都可以帮助我吗?
MyService.java
stopService
我停止服务
答案 0 :(得分:1)
使用此代码段
t = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
if(flag){//here add a flag
return;
}
t.sleep(5000);
// Toast.makeText(getApplicationContext(), "Horas",
// Toast.LENGTH_LONG).show();
handler.sendEmptyMessage(0);
} catch (Exception e) {
e.printStackTrace();
}
}
}
});
t.start();
public void onDestroy() {
Toast.makeText(this, "MyService Stopped", Toast.LENGTH_LONG).show();
Log.d(TAG, "onDestroy");
//t.interrupt();
handler.removeCallbacks(t);
super.onDestroy();
flag = false;//here set flag to false
}
答案 1 :(得分:0)
是的,您无法通过致电str(df)
'data.frame': 344858 obs. of 8 variables:
$ long : num 18 18 18 18 18 ...
$ lat : num 48.7 48.7 48.7 48.7 48.7 ...
$ order : int 1 2 3 4 5 6 7 8 9 10 ...
$ hole : logi FALSE FALSE FALSE FALSE FALSE FALSE ...
$ piece : Factor w/ 2 levels "1","2": 1 1 1 1 1 1 1 1 1 1 ...
$ group : Factor w/ 80 levels "0.1","1.1","2.1",..: 1 1 1 1 1 1 1 1 1 1 ...
$ id : chr "0" "0" "0" "0" ...
$ measure: num 0.7 0.4 0.8 0.8 0.8 0.2 0.8 0.5 0.2 0 ...
来停止Thread
,因为您的stopService
和thread
在不同的流程中运行。 service
只能停止stopService
。一旦线程运行,你只能在线程内停止它,并且无法立即停止线程。安全且最简单的方法是在线程中声明一个布尔标志,并等待标志被检查,如:
Service
现在,在您的public class MyThread extends Thread {
public boolean isStop = false;
public void setStop() {
isStop = true;
}
@Override
public void run() {
super.run();
//Do your work here
if (isStop) return; // check multiple times after doing some hard word
//do somework
if (isStop) return;
}
}
或onDestroy
,您可以致电onStop
并等待myThread.setStop()
被召唤 - >你的线程实际上会停止。