編輯:關於Android編程
在android開發中,一說起線程的使用,很多人馬上想到new Thread(){...}.start()這種方式。
這樣使用當然可以,但是多次使用這種方式,會創建多個匿名線程。使得程序運行起來越來越慢。
因此,可以考慮使用一個Handler來啟動一個線程,當該線程不再使用就刪除,保證線程不會重復創建。
一般會使用Handler handler = new Handler(){...}創建Handler。這樣創建的handler是在主線程即UI線程下的Handler,
即這個Handler是與UI線程下的默認Looper綁定的。Looper是用於實現消息隊列和消息循環機制的。
因此,如果是默認創建Handler那麼如果線程是做一些耗時操作如網絡獲取數據等操作,這樣創建Handler是不行的。
Android API提供了HandlerThread來創建線程。官網的解釋是:Handy class for starting a new thread that has a looper.
The looper can then be used to create handler classes. Note that start() must still be called.
HandlerThread實際上就一個Thread,只不過它比普通的Thread多了一個Looper。
創建HandlerThread時要把它啟動了,即調用start()方法。然後創建Handler時將HandlerThread中的looper對象傳入。
復制代碼 代碼如下:
HandlerThread thread = new HandlerThread("MyHandlerThread");
thread.start();
mHandler = new Handler(thread.getLooper());
mHandler.post(new Runnable(){...});
那麼這個Handler對象就是與HandlerThread這個線程綁定了(這時就不再是與UI線程綁定了,這樣它處理耗時操作將不會阻塞UI)。 下面是代碼說明:
復制代碼 代碼如下:
public class MainActivity extends Activity implements OnClickListener{
private Handler mHandler;
private HandlerThread mHandlerThread;
private boolean mRunning;
private Button btn;
@Override
protected void onDestroy() {
mRunning = false;
mHandler.removeCallbacks(mRunnable);
super.onDestroy();
}
@Override
protected void onResume() {
mRunning = true;
super.onResume();
}
@Override
protected void onStop() {
mRunning = false;
super.onStop();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(this);
mHandlerThread = new HandlerThread("Test", 5);
mHandlerThread.start();
mHandler = new Handler(mHandlerThread.getLooper());
}
private Runnable mRunnable = new Runnable() {
@Override
public void run() {
while (mRunning) {
Log.d("MainActivity", "test HandlerThread...");
try {
Thread.sleep(200);
} catch (Exception e) {
e.printStackTrace();
}
}
}
};
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.btn :
mHandler.post(mRunnable);
break;
default :
break;
}
}
}
接觸了百度地圖開發平台半個月了,這2天試著模仿了微信給好友發送位置功能,對百度地圖的操作能力又上了一個台階(如果需要完整demo,請評論留下郵箱) 我在實現這個
本文實例講述了Android AutoCompleteTextView連接數據庫自動提示的方法。分享給大家供大家參考,具體如下:這個簡單例子也體現MVC的思想。AutoC
在Android開發過程中,經常會碰到Activity之間的切換效果的問題,下面介紹一下如何實現左右滑動的切換效果,首先了解一下Activity切換的實現,從Androi
話說有了靈感就要抓住,來了興趣就要去研究它。 所以雖然最近很忙,但我還是沒有丟下Android圖表實現的研究,終於現在我的圖表庫基類 基本上已經有點模樣了,不在是小打小鬧