HTML/JavaScript小工具

HTML/JavaScript小工具

2017年2月16日 星期四

Looper


  1. MessageQueue存放Message的物件
    1.  
  2. Thread+Looper 取得處理消息的執行緒 
    1. 一個Thread只有一個Looper  
    2. Looper  內幾個重要方法
      • myLooper 取得我執行緒目前的Looper
      • getMainLooper 取得UI執行緒的Looper
      • quit 結束收集
      • loop 開始不停的收集資訊給Handler 
      • prepare 自己建立的執行緒 使用Looper前要使用此方法準備一個Looper
  3.  Message
    1. 消息的格式 Message 會記錄 用在哪個Handler,同一個Message 物件不可用在不同的Handler
  4.  Handler
    1. 發送的函數 Handler post sendMessage

MainActivity

public class MainActivity extends AppCompatActivity {
    MyHandlerThread mHandlerThread = null;    
@Override    
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);        
setContentView(R.layout.activity_main);        
Handler myHander = new Handler();        
Log.d("MainActivity.myLooper()", Looper.myLooper().toString());        
Log.d("MainActivity.MainLooper", Looper.getMainLooper().toString());      
  Log.d("myHander", myHander.getLooper()+"");
    }


    public void start(View view){
       TextView textView = (TextView) findViewById(R.id.textView);       
 mHandlerThread = new MyHandlerThread();   
     mHandlerThread.textView = textView;      
  mHandlerThread.start();    }

    public void sendMsg(View view){
        Message msg = new Message();        
msg.obj = "Test:"+(Math.random()*1000)%1000;    
    mHandlerThread.mHandler.sendMessage(msg);    }
}


MyHandlerThread
public class MyHandlerThread extends Thread {

    public static final String TAG = "MyHT";    
public TextView textView;   
 public Handler mHandler;   
 public Handler myHanderUI;   
 public void run(){
        myHanderUI = new Handler(Looper.getMainLooper()){
             @Override             
public void handleMessage(Message msg) {
                 textView.setText("Msg:"+msg.obj);               
  super.handleMessage(msg);             }
        };
        Log.d("Howard","MyHandlerThread  myHander:"+
myHanderUI.getLooper());        if (Looper.myLooper() == null){
            Looper.prepare();        }
        mHandler = new Handler(Looper.myLooper()){

            @Override           
 public void handleMessage(Message msg) {
                Message myMsg = new Message();              
  myMsg.obj = msg.obj;                
myHanderUI.sendMessage(myMsg);               
 Log.d("Howard","handleMessage:"+msg.obj);             
   super.handleMessage(msg);            }
        };        Looper.loop();    }

}


沒有留言:

張貼留言