为什么这在主活动线程上没有完成?

  • 本文关键字:线程 活动 android
  • 更新时间 :
  • 英文 :


调用Destory ->仍在工作线程 测试设备操作系统 8.0

为什么不停止后台工作8.0?

我知道Android 8.0后台工作不起作用。

以下是示例代码:

import android.content.Intent;
import android.support.v7.app.`enter code here`AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
int count=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Thread thr = new Thread(new Runnable() {
@Override
public void run() {
try{
// why not stop after on Destroy
while(true) {
Log.e("test", "count : " + count+"  Status : ");
count++;
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this,count+"",Toast.LENGTH_SHORT).show();
}
});
Thread.sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
thr.start();
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.e("test","Main activity Destory");
}
}

如果使用简单的处理程序而不是线程来更新 UI 并在销毁时使用删除回调,会发生什么情况。这是使用处理程序的示例代码。试试这个。

private int mCount = 0;
private Runnable mRunnable;
private Handler mNewHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mNewHandler = new Handler();
mRunnable = new Runnable() {
@Override
public void run() {
try {
Log.e("test", "mCount : " + mCount + "  Status : ");
mCount++;
Toast.makeText(MainActivity.this, mCount + "", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Log.e("Exception", "");
e.printStackTrace();
} finally {
mNewHandler.postDelayed(mRunnable, 1000);
}
}
};
mRunnable.run();
}
@Override
public void onDestroy() {
mNewHandler.removeCallbacks(mRunnable);
super.onDestroy();
}

如果你想使用线程,试着在销毁时添加这段代码。

中断();

最新更新