android通过两种方法开启一个线程

android通过两种方法开启一个线程

ID:17774526

大小:76.00 KB

页数:9页

时间:2018-09-05

android通过两种方法开启一个线程_第1页
android通过两种方法开启一个线程_第2页
android通过两种方法开启一个线程_第3页
android通过两种方法开启一个线程_第4页
android通过两种方法开启一个线程_第5页
资源描述:

《android通过两种方法开启一个线程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、android通过两种方法开启一个线程大家都知道,在PC上的应用程序当需要进行一些复杂的数据操作,但不需要界面UI的时候,我们会为应用程序专门写一个线程去执行这些复杂的数据操作。通过线程,可以执行例如:数据处理、数据下载等比较耗时的操作,同时对用户的界面不会产生影响。在Android应用程序开发中,同样会遇到这样的问题。当我们需要访问网络,从网上下载数据并显示在我们的UI上时,就会启动后台线程去下载数据,下载线程执行完成后将结果返回给主用户界面线程。  对于线程的控制,我们将介绍一个Handler类,使用该类可以对运行在不同线程中的多个任务进行排队,并使用Message和Runnabl

2、e对象安排这些任务。在javadoc中,对Handler是这样解释的:Handler可以发送和处理消息对象或Runnable对象,这些消息对象和Runnable对象与一个线程相关联。每个Handler的实例都关联了一个线程和线程的消息队列。当创建了一个Handler对象时,一个线程或消息队列同时也被创建,该Handler对象将发送和处理这些消息或Runnable对象。  下面有几种对Handler对象的构造方法需要了解一下:a、如果new一个无参构造函数的Handler对象,那么这个Handler将自动与当前运行线程相关联,也就是说这个Handler将与当前运行的线程使用同一个消息队列

3、,并且可以处理该队列中的消息。privateHandlerhandler=newHandler();  我们做这样一个实验,在主用户界面中创建一个带有无参构造函数的Handler对象,该Handler对象向消息队列推送一个Runnable对象,在Runnable对象的run函数中打印当前线程Id,我们比较主用户界面线程ID和Runnable线程ID是否相同。具体代码如下:publicclassHandlerTest01extendsActivity{@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(

4、savedInstanceState);setContentView(R.layout.main);System.out.println("Activity—>"+Thread.currentThread().getId());handler.post(r);}privateHandlerhandler=newHandler();privateRunnabler=newRunnable(){@Overridepublicvoidrun(){try{Thread.sleep(2000);}catch(InterruptedExceptione){//TODOAuto-generatedc

5、atchblocke.printStackTrace();}System.out.println("Runnalbe—>"+Thread.currentThread().getId());}};} 通过这个例子的输出可以发现,Runnable对象和主用户界面线程的ID是相同。在这个例子中,我们直接利用handler对象post了一个runnable对象,相当于直接调用了Runnable对象的run函数,也就说没有经过start函数调用run(),那么就不会创建一个新线程,而是在原有线程内部直接调用run()方法,因此输出的线程Id是相同的。b、如果new一个带参构造函数的Handler

6、对象,那么这个Handler对象将与参数所表示的Looper相关联。注意:此时线程类应该是一个特殊类HandlerThread类,一个Looper类的Thread类,它继承自Thread类。HandlerThreadhandlerthread=newHandlerThread("MyThread");handlerthread.start();privateMyHandlerhandler=newMyHandler(handlerthread.getLooper());classMyHandlerextendsHandler{publicMyHandler(){}publicMyHan

7、dler(Looperlooper){super(looper);}}下面这个例子,将介绍如何开启一个新的线程,并通过Handler处理消息。  HandlerTest02.javapublicclassHandlerTest02extendsActivity{privateMyHandlermyhandler=null;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){//TOD

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。