安卓的多線程和java的多線程操作一樣
有兩種實現方法:
-
繼承Thread類,重寫run方法
-
實現Runnable接口,重寫run方法
兩種方法的線程啓動需要調用start方法而不是run,否則相當於一個普通方法而非線程
繼承Thread類:直接new然後調用start方法
private class MyThread extends Thread{
@Override
public void run() {
Log.e("MyThread的run方法",Thread.currentThread().getName());
result = fib(25);
Log.e("斐波那契數列第n項的值爲:", result + "");
Message message = new Message();
message.what = 100;
message.obj = result;
mainHandler.sendMessage(message);
}
}
new MyThread().start();
實現Runnable接口:new出來當作Thread類的構造參數,再調用start方法
private class MyRunnable implements Runnable{
@Override
public void run() {
Log.e("MyRunnable","run方法");
Log.e("MyRunnable",Thread.currentThread().getName());
}
}
new Thread(new MyRunnable()).start();
注意:在子線程中無法操作Activity的組件,想操作需要藉助Handler
需要一下三步:
-
創建Handler的匿名子類對象
-
發送消息給UI線程
-
處理信息
private Handler mainHandler = new Handler(){
@Override
public void handleMessage(@NonNull Message msg) {
Log.e("handleMessage方法",Thread.currentThread().getName());
switch (msg.what){
case 100:
resultTv.setText(msg.obj + "");
break;
}
}
};
Message message = new Message();
message.what = 100;
message.obj = result;
mainHandler.sendMessage(message);
PS:網絡操作等耗時操作必須放在子線程