为什么这个地方要重写onDestroy()方法?

zrc 发布于 2013/12/05 23:01
阅读 5K+
收藏 0
package com.example.runnablecomture;


import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;


public class MainActivity extends Activity implements Runnable {
private int i;
private Thread thread;// 创建一个线程对象


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button startbutton = (Button) findViewById(R.id.StatrThread);
startbutton.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View v) {
// TODO 自动生成的方法存根
i = 0;
thread = new Thread(MainActivity.this);// 实例化一个线程对象
thread.start();// 用thread来启动这个线程


}
});
Button stopbutton = (Button) findViewById(R.id.StopThread);
stopbutton.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View v) {
// TODO 自动生成的方法存根
if (thread != null) {// 判断线程是否存在
thread.interrupt();// 中断线程
thread = null;// 将线程状态置为空,如果不置为空的话就会不断发送中断命令
Log.i("提示", "中断线程");
}


}
});
}


@Override
public void run() {
// 因为实现的是runnable接口所以必须用Thread.currentThread()来获取当前正在运行的线程(一个线程只有一个run方法)
while (!Thread.currentThread().isInterrupted()) {// 当前线程没有中断时执行以下代码
i++;
Log.i("循环变量", String.valueOf(i));
}


}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
MenuInflater menuInflater = new MenuInflater(this);
menuInflater.inflate(R.menu.activity_main, menu);
return true;
}


@Override
protected void onDestroy() {
// TODO 自动生成的方法存根
if (thread != null) {
thread.interrupt();// 中断线程
thread = null;
}
super.onDestroy();
}




@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO 自动生成的方法存根
if (keyCode == KeyEvent.KEYCODE_BACK) {
moveTaskToBack(false);
return true;
}
return super.onKeyDown(keyCode, event);
}


}


加载中
0
Leon_wy
Leon_wy
如果此处不销毁你创建的线程那么就会导致该线程一直在后台运行无法维护,除非整个应用退出
zrc
zrc
谢谢,我知道了
0
93440331
93440331

补充楼上:

而且由于线程仍在后台运行,activity持有线程的引用,activity以及activity使用的资源都无法释放.

0
TiHou
TiHou
顶楼上
返回顶部
顶部