ven*_*lee 5 multithreading android handler
public class LooperThread extends Thread {
private Handler handler = null;
public Handler getHandler() {
return handler;
}
@Override
public void run() {
Looper.prepare();
handler = new Handler();
Looper.loop();
}
}
class Helper {
private static LooperThread databaseThread = null;
static {
databaseThread = new LooperThread();
databaseThread.start();
}
public void postRunable(Runnable r) {
databaseThread.getHandler().post(r);
databaseThread.getHandler().sendMessage(new Message());
}
}
//ui thread.
class UIActivity extends Activity {
private Helper helper = new Helper();
public void onCreate(Bundle savedInstanceState) {
helper.postRunnable(new Runnable() {
public void run() {
//work asyn,like query from db.
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
有时调用databaseThread.getHandler().post(r);
,它返回null,有时不是,为什么这个?像往常一样,handler
应该是静态块初始化.
getHandler 方法返回 null,因为视图未附加:
public Handler getHandler() {
if (mAttachInfo != null) {
return mAttachInfo.mHandler;
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
mAttachInfo
在 中设置dispatchAttachedToWindow
并在 中清零dispatchDetachedFromWindow
。
而不是mapView.getHandler().post()
你可以直接使用mapView.post()
(这似乎使用getHandler().post()
或ViewRootImpl.getRunQueue().post())
.
归档时间: |
|
查看次数: |
1464 次 |
最近记录: |