Handler:
接收子线程发送的数据,并用此数据配合主线程更新UI。 Handler充当主线程和子线程之间交互的中介示例:使用Handler+Thread解决求斐波那契数列问题,并更新UI界面
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private EditText editText;
private Button button;
TextView result;
long res;
private Handler mainHandler =new Handler(){
public void handleMessage(Message msg){
switch(msg.what){
case 100:
result.setText(msg.obj+"");
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText=findViewById(R.id.num);
button=findViewById(R.id.btu);
result=findViewById(R.id.result);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new myThread().start();
}
});
}
private class myThread extends Thread{
@Override
public void run() {
res=fib(6);
Message message=new Message();
message.what=100;
message.obj=res;
mainHandler.sendMessage(message);
}
}
long fib(int n){
if(n==1||n==2){
return 1;
}
else{
return fib(n-1)+fib(n-2);
}
}
}
三:使用AsyncTask(异步任务)处理多线程问题
异步任务的定义是一个在后台线程上运行,其结果是在UI线程上显示的一种类.
异步任务执行时对应的四个方法:
onPreExecute():任务被执行之前调用UI线程.这步通常被用于设置任务,例如在用户界面显示一个进度条.
doInBackground() :onPreExcute()执行完后,立刻调用后台任务 .
原创文章 111获赞 80访问量 1万+
关注
私信
展开阅读全文
作者:池鱼之殃