当我们在android中联网读取数据或者读取本地较大的一个文件的时候,如果5秒钟还没有完成的话,界面会出现假死现象,会收到Android的一个错误提示 "强制关闭".这个时候我们需要把这些耗时的操作,放到子线程中完成,同时为了保证主线程安全,这里google给我们提供了handler类
下面我们做个小例子,讲解一下
首先简单些一个布局文件
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/startButton"
android:text="start"
android:layout_below="@+id/text"
android:layout_marginTop="23dp"
/>
<Button
android:id="@+id/endButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_below="@+id/startButton"
android:layout_marginTop="23dp"
android:text="end" />
然后我们在Activity中获取控件
private Button startButton;
private Button endButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startButton = (Button) findViewById(R.id.startButton);
startButton.setOnClickListener(new StartButtonListener());
endButton = (Button) findViewById(R.id.endButton);
endButton.setOnClickListener(new EndButtonListener());
}
设置监听按钮,然后我们通过handler的post方法将线程调教到我们的消息队列中
class StartButtonListener implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
handler.post(updataThread);
}
}
接下来我们创建个handler对象,用来调用handler类下的方法
Handler handler = new Handler();
构建抽象方法run卸载线程中
Runnable updataThread = new Runnable(){
@Override
public void run() {
System.out.print("UpdataThread");
handler.postDelayed(updataThread,3000);
}
};
这里用handler类下postDelayed方法延迟打印
最后实现取消,设置监听end按钮
class EndButtonListener implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
handler.removeCallbacks(updataThread);
}
}
学习内容来自http://www.iqiyi.com/w_19rr5sye69.html#curid=1011465209_86c40bd7646f955ee85b0d2cf8e42f12