如何在onBackPressed或onPause或OnResume中停止线程

时间:2017-06-02 11:25:54

标签: java android thread-safety

每当我尝试按下后退按钮或应用程序是后台或任何实例时,我使用位置来更新经度和纬度,我希望停止运行location_thread。当我切换到当前活动时恢复它。

Data MyCSV;
  Infile "C:\MyName\ImportData.CSV"
         Delimiter="," LRecL=1000 DSD Missover Firstobs=2; * Firstobs=2 to delete col-names;
  Informat qty_txt $9. ; * 9 .. length in characters;
  If qty_txt ^= "NA" Then qty=Input(qty_txt,Best15.); Drop qty_txt;
Run;

1 个答案:

答案 0 :(得分:0)

请勿使用Thread.stop()方法deprecated and unsafe

停止线程的最佳方法是完成它的工作

创建易变变量,如

public volatile boolean threadIsStopped;

替换

while (!isInterrupted())

while (!threadIsStopped)

然后让它成真

public void onBackPressed() {
    super.onBackPressed();
    threadIsStopped = true;
    Intent intent = new Intent(Logistic_ReportProblem.this, FPAgentHome.class);
    startActivity(intent);
    finish();
}  

由于你的背压开始了另一项活动并完成了当前的事情,所以做得更好:

@Override
protected void onResume() {
    super.onResume();
    threadIsStopped = false;
    //start thread here
} 

@Override
protected void onPause() {
    super.onResume();
    threadIsStopped = true;
} 

所以有s no need to stop thread in onBackPressed`。

请注意,在线程停止之前设置threadIsStopped后可能会出现延迟。

关于恢复线程 - 在您的情况下,您只需创建新线程并启动它。

另请注意,如果您更改设备的方向,则会再次调用onPauseonResume。这就是为什么强烈建议使用IntentService来做这些事情。