咱们知道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