標籤:bsp 取資料 發送 util 技巧 sgid gid 獲得 timertask
方式不止一種,這裡使用的是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】實現線程非同步小技巧