为什么我的这段代码,在logcat里面总是在无限制的回收垃圾?

zrc 发布于 2013/12/16 15:21
阅读 105
收藏 0
package com.example.usethreadtoadboard;


import java.util.Random;


import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;


public class MainActivity extends Activity implements Runnable {
private int[] path = new int[] { R.drawable.img01, R.drawable.img02, R.drawable.img03, R.drawable.img04, R.drawable.img05, R.drawable.img06 };
private String[] title = new String[] { "编程词典系列产品", "高效开发", "快乐分享", "用户人群", "快速学习", "全方位查询" };
private ImageView IV;
private Handler handler;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
IV = (ImageView) findViewById(R.id.imageView1);


Thread thread = new Thread(MainActivity.this);
thread.start();
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO 自动生成的方法存根
if (msg.what == 0x101) {
TextView TX;
TX = (TextView) findViewById(R.id.textView1);// 判断接受消息标示是否是对应的发送的标示
TX.setText(msg.getData().getString("title"));// 通过bundler中的key寻找到数据
IV.setImageResource(path[msg.arg1]);// 通过Message中所保存的整型索引来显示图片
}


super.handleMessage(msg);
}


};


}


@Override
public void run() {
// TODO 自动生成的方法存根
int index = 0;// 声明一个整型变量用于存储随机生成的图片索引号
while (!Thread.currentThread().isInterrupted()) {
index = new Random().nextInt(path.length);// 在path这个数组可用索引里面随机生成索引值
Message m = handler.obtainMessage();// 从消息池子中取得一条空消息(有利于节省内存)
m.arg1 = index;// 将索引值存储到message中
m.what = 0x101;// 设置消息识别,让UI能够识别到时哪条消息
/*
* Message存储东西时,如果是除整型和Objiect型外的其他类型的数据, 就需要将数据保存在Bundler中,然后通过setData()将bundler发送
*/
Bundle bundler = new Bundle();// 获取bundler对象
bundler.putString("title", title[index]);
m.setData(bundler);
handler.sendMessage(m);// 将已经封装数据的message发送出去,执行sendMessage方法后自动回调handlerMessage()方法
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}


}


}


@Override
protected void onDestroy() {
// TODO 自动生成的方法存根
if (!Thread.currentThread().isInterrupted()) {
this.finish();
Thread.currentThread().interrupt();// 中断线程
handler.removeCallbacks(Thread.currentThread());// 销毁线程,防止再次打开这个程序的时候再次创建新的线程
Log.i("消息", "中断线程");
}
super.onDestroy();
}


}

加载中
返回顶部
顶部