Handler 的偽非同步與真非同步

2021-06-23 01:05:52 字數 1427 閱讀 9283

什麼是handler,已經有很多人介紹過了,在這裡重點記下最近對handler的理解。

handler如果不與looper一起呼叫,那麼它與activity其實是乙個執行緒,在這裡先貼下**

package lxf.handlertest;

import android.os.bundle;

import android.os.handler;

import android.os.looper;

import android.os.message;

import android.view.menu;

import android.view.menuitem;

import android.view.view;

import android.view.view.onclicklistener;

import android.widget.button;

import android.widget.textview;

public class mainactivity extends actionbaractivity

runnable r = new runnable() catch (interruptedexception e)

} };

private class btnlistener implements onclicklistener

} private class testthread implements runnable

};while (i < 10)

looper.loop();

} }private void initralweight()

@override

public boolean oncreateoptionsmenu(menu menu)

@override

public boolean onoptionsitemselected(menuitem item)

return super.onoptionsitemselected(item);

}}

為了驗證同一執行緒,需先注釋initralweight();然後執行,可發現:

接下來嘗試理解handler與looper的關係,這裡候就不能注釋initralweight();通過除錯發現,

handler.sendmessage(msg)後,handler並沒有立即取出資訊,而是等到looper.loop()後,才從訊息佇列裡取出。

其實handler要實現非同步,只需要呼叫thread.start()方法就行,如果不呼叫這個的話,那就是偽非同步。

Handler與非同步訊息的原始碼解析

looper 的prepare 方法 如下 private static void prepare boolean quitallowed sthreadlocal.set new looper quitallowed 這個方法裡面最重要的無疑就是 sthreadlocal 物件的 get 和 se...

AsyncTask和Handler非同步實現比較

一 asynctask asynctask是android提供的輕量級的非同步類,可以直接繼承asynctask,在類中實現非同步操作,並提供介面反饋當前非同步執行的程度 可以通過介面實現ui進度更新 最後反饋執行的結果給ui主線程。優點 簡單 快捷 過程可控。缺點 在使用多個非同步操作和並需要進行...

Android非同步訊息處理Handler的使用

眾所周知,android的ui執行緒是不安全的,其它執行緒不可以直接操作ui。那麼就產生了乙個問題 android非同步訊息處理 如何在其它執行緒進行ui更新操作。由於ui都是由主線程繪製的,在進行耗時操作的時候會導致主線程繁忙,最後導致ui介面卡頓或無反應,所以在進行耗時操作的時候我們應該新建一條...