咱們知道handler的功能有兩個,一個是實現定時任務,另外一個是實現主線程和子線程的信息通訊,尤爲是安卓中耗時操做不能在主線程進行,更新界面操做不能在子線程進行,在這種需求背景下,因而出現了handler+thread的搭配實現子線程讀取網絡數據,讀取完通知主線程更新UI。不過我這一篇寫的是handler的定時任務功能。java
首先要了解重點的方法handler類中的postDelayed(Runnable r,long delaymillis)方法。這個方法的做用是延遲delaymillis毫秒執行一次Runnable對象中的run方法部分的代碼,把它寫成遞歸的形式就能無限循環下去執行r的run方法代碼。此時runnable並無新開一個線程,它仍是在handler所在的線程中執行。android
下面是我作的輪播圖的小例子的所有代碼,在個人手機上運行沒有任何問題。網絡
圖片:app
import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.widget.ImageView; public class handlerImage extends Activity { ImageView iView; Handler myhandler; myRun runnable = new myRun(); int img[] = { R.drawable.a, R.drawable.b, R.drawable.timg };//三張圖片 int i = 1; protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.img); iView = (ImageView) findViewById(R.id.imageView1); myhandler = new Handler(); myhandler.postDelayed(runnable, 2000); } class myRun implements Runnable { @Override public void run() { // TODO Auto-generated method stub iView.setImageResource(img[i % 3]); i++; myhandler.postDelayed(runnable, 4000);//每4000毫秒執行一次run方法 } } }
另外附上xmlide
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageView android:id="@+id/imageView1" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
大學畢業沒多久,又是第一次接觸handler,瞭解還不深,若是有錯誤但願你們在評論區指正。post