1. 程式人生 > >【Android】實現線程異步小技巧

【Android】實現線程異步小技巧

使用 msg xtend util rri wsh ride 執行 java

方式不止一種,這裏使用的是Timer類,創建一個定時器。我們經常需要獲得移動設備端口的顯示屏信息,但是onCreate()方法執行的時候,OnShow()方法不一定執行了,也就是說,在執行Oncreate()時候屏幕還沒加載出來,所以這時候可以應用一個異步機制獲取數據。

import android.app.Activity;
import android.os.Handler;
import android.os.Message;
import android.view.View;

import java.util.Timer;
import java.util.TimerTask;

/** * Created by Lenovo on 2017/6/2. */ public class MyActivity extends Activity{ public void ViewAfterShow(int width,int hight){ } /** * 使用線程異步,獲取視圖上的數據,比如高和寬 * @param viewID 視圖ID * @param msgID 消息ID */ public void ViewShowListen(int viewID,int msgID){
final int f_viewID = viewID; final int f_msgID = msgID; final Timer f_timer = new Timer(); final Handler f_handler = new Handler(){ @Override public void handleMessage(Message msg){ if(msg.what == f_msgID){ View v
= (View)findViewById(f_viewID); if(v.getWidth() != 0 && v.getHeight() != 0){ f_timer.cancel();//取消 ViewAfterShow(v.getWidth(),v.getHeight());//回調信息 } } } }; //這裏之所以不在該run()方法裏進行操作,是因為裏面的數據是最終的,所以這裏應用了一個消息發送機制。 TimerTask task = new TimerTask() { @Override public void run() { Message message = new Message(); message.what = f_msgID; f_handler.sendMessage(message);//發送消息 } }; //延遲每次延遲10毫秒 隔500毫秒執行一次 f_timer.schedule(task,10,500); } }

【Android】實現線程異步小技巧