为什么即使在Android中调用stopService之后,服务中的线程也没有停止?

时间:2015-07-22 10:24:07

标签: android android-service

我正在使用服务将图片上传到服务器上,取消按钮就可以取消上传,但问题是当我点击取消按钮时,我调用了stopService(),然后是{{1}执行的方法。但仍然继续上传......我想知道这是怎么发生的?我是一个初学者,我知道在onDestroy调用后该服务将被销毁,那么这是怎么回事?任何人都可以帮助我吗?

MyService.java

stopService

我停止服务

2 个答案:

答案 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,因为您的stopServicethread在不同的流程中运行。 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()被召唤 - >你的线程实际上会停止。