预览加载中,请您耐心等待几秒...
1/4
2/4
3/4
4/4

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

方法一:(java习惯,在android不推荐使用) 刚刚开始接触android线程编程的时候,习惯好像java一样,试图用下面的代码解决问题 newThread(newRunnable(){ publicvoidrun(){ myView.invalidate(); } }).start(); 可以实现功能,刷新UI界面。但是这样是不行的,因为它违背了单线程模型:AndroidUI操作并不是线程安全的并且这些操作必须在UI线程中执行。 方法二:(Thread+Handler) 查阅了文档和apidemo后,发觉常用的方法是利用Handler来实现UI线程的更新的。 Handler来根据接收的消息,处理UI更新。Thread线程发出Handler消息,通知更新UI。 HandlermyHandler=newHandler(){ publicvoidhandleMessage(Messagemsg){ switch(msg.what){ caseTestHandler.GUIUPDATEIDENTIFIER: myBounceView.invalidate(); break; } super.handleMessage(msg); } }; classmyThreadimplementsRunnable{ publicvoidrun(){ while(!Thread.currentThread().isInterrupted()){ Messagemessage=newMessage(); message.what=TestHandler.GUIUPDATEIDENTIFIER; TestHandler.this.myHandler.sendMessage(message); try{ Thread.sleep(100); }catch(InterruptedExceptione){ Thread.currentThread().interrupt(); } } } } 以上方法demo看:HYPERLINK"http://rayleung.javaeye.com/blog/411860"http://rayleung.javaeye.com/blog/411860 方法三:(java习惯,不推荐) 在Android平台中需要反复按周期执行方法可以使用Java上自带的TimerTask类,TimerTask相对于Thread来说对于资源消耗的更低,除了使用Android自带的AlarmManager使用Timer定时器是一种更好的解决方法。我们需要引入importjava.util.Timer;和importjava.util.TimerTask; publicclassJavaTimerextendsActivity{ Timertimer=newTimer(); TimerTasktask=newTimerTask(){ publicvoidrun(){ setTitle("hearme?"); } }; publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); timer.schedule(task,10000); } } 方法四:(TimerTask+Handler) 实际上这样做是不行的,这跟Android的线程安全有关!应该通过配合Handler来实现timer功能的! publicclassTestTimerextendsActivity{ Timertimer=newTimer(); Handlerhandler=newHandler(){ publicvoidhandleMessage(Messagemsg){ switch(msg.what){ case1: setTitle("hearme?"); break; } super.handleMessage(msg); } }; TimerTasktask=newTimerTask(){ publicvoidrun(){ Messagemessage=newMessage(); message.what=1; handler.sendMessage(message); } }; publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); timer.schedule(task,10000