Service这部分,也算是Android中非常重要的知识了,尤其是做复杂应用的时候。至于异步消息和多线程,在功能复杂的同时用的也是越来越多,加上这几天在写Windows项目的部分里面也涉及到了异步套接字等等的异步知识,发现,进程间的通讯等等也需要重新看看。知识可能就是这样把,也许你当初把书摔在地上说没用的东西,可能这个时候你就会后悔了。
Handler的异步消息处理机制
android开发当中,经常会有一些耗时操作,他们是不能放在主线程当中的。相信学过操作系统的人都知道『阻塞』是什么意思,如果主线程中放了大量的耗时操作,那么整个程序的用户体验势必会变得很差。所以,我们很自然而然就想到了——多线程.
浅谈多线程
多线程网上有很多资料解释,在此不做赘述,只是简单的把多线程实现的几种方式说一下.
1.继承Thread类
我们可以自己定义一个类,然后继承Thread这个基类。重写类中的run方法。run方法中,放入我们想要在子线程所做的耗时操作。在类的外部,可以创建一个我们自定义的类的对象,之后调用start成员方法,就可以自动执行run方法内的代码.
1 2 3 4 5 6 7 8 9 10 |
class myThread extends Thread{ public void run(){ ... } } Thread thread = new Thread(); thread.start(); |
2.重新实现runnable接口
1 2 3 4 5 6 7 8 9 10 |
class myThread implements Runnable{ public void run(){ ... } } Thread thread = new Thread(new myThread()); thread.start(); |
3.匿名类
这种方法相对来说,比较方便,简单,还是比较好用的.
1 2 3 4 5 6 7 |
new Thread(new Runnable{ public void run(){ ... } }).start(); |
多线程不是万能的
我们可能觉得,有了多线程之后,很多耗时操作就都能够解决了,但是,假如我们现在一个activity中有一个button,一个textview,我们想通过button的点击,执行一系列的耗时操作之后,更新textview控件上面的内容。由于有了耗时操作的出现,我们很自然的想到多线程的例子,但是请注意,子线程里面是不允许对UI控件进行操作的。不信的话,你可以自己写一个子线程,然后在里面调用textview的settext方法试试,是会报错的。所以,这就用到了我们要说的异步消息处理机制。
在操作系统中,异步就意味着我们不用阻塞在那些耗时的操作上,只需要发出一个耗时操作的请求就可以做接下来的事情,这样,就不会发生进程的阻塞。等到耗时操作完成之后会用特定的方式来通知我们,已经完成。这一点在windows的异步套接字编程上也体现的很好。那么在android中,异步任务机制还有更奇妙的运用。
异步消息处理机制
异步消息的处理在android中有以下应用:当我们要执行耗时操作的同时还要对UI控件进行操作的时候,因为UI的操作不能放在子线程中运行,我们就可以把UI的操作部分传递到主线程中进行处理,把耗时操作留在子线程中进行,这样既不会阻塞进程,也完成了对UI的操作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
public class HandlerActivity extends Activity { public static final int UPDATE_TEXT = 1; private Button mButton; private TextView mTextView; private Handler handler = new Handler(){ //处理消息在主线程中 @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub switch (msg.what) { case UPDATE_TEXT: mTextView.setText("it is changed"); break; default: break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.layout_handler); mButton = (Button)findViewById(R.id.change_text); mTextView = (TextView.change_text); mTextView = (TextView د越来越多,加上这几天在写Windows项目的部分里面也涉及到了异步套接字等等的异步知识,发现,进程间的通讯等等也需要重新看看。知识可能就是这样把,也许你当初把书摔在地上说没用的东西,可能这个时候你就会后悔了。
Handler的异步消息处理机制android开发当中,经常会有一些耗时操作,他们是不能放在主线程当中的。相信学过操作系统的人都知道『阻塞』是什么意思,如果主线程中放了大量的耗时操作,那么整个程序的用户体验势必会变得很差。所以,我们很自然而然就想到了——多线程. 浅谈多线程多线程网上有很多资料解释,在此不做赘述,只是简单的把多线程实现的几种方式说一下. 1.继承Thread类我们可以自己定义一个类,然后继承Thread这个基类。重写类中的run方法。run方法中,放入我们想要在子线程所做的耗时操作。在类的外部,可以创建一个我们自定义的类的对象,之后调用start成员方法,就可以自动执行run方法内的代码.
2.重新实现runnable接口
3.匿名类这种方法相对来说,比较方便,简单,还是比较好用的.
多线程不是万能的我们可能觉得,有了多线程之后,很多耗时操作就都能够解决了,但是,假如我们现在一个activity中有一个button,一个textview,我们想通过button的点击,执行一系列的耗时操作之后,更新textview控件上面的内容。由于有了耗时操作的出现,我们很自然的想到多线程的例子,但是请注意,子线程里面是不允许对UI控件进行操作的。不信的话,你可以自己写一个子线程,然后在里面调用textview的settext方法试试,是会报错的。所以,这就用到了我们要说的异步消息处理机制。 在操作系统中,异步就意味着我们不用阻塞在那些耗时的操作上,只需要发出一个耗时操作的请求就可以做接下来的事情,这样,就不会发生进程的阻塞。等到耗时操作完成之后会用特定的方式来通知我们,已经完成。这一点在windows的异步套接字编程上也体现的很好。那么在android中,异步任务机制还有更奇妙的运用。 异步消息处理机制异步消息的处理在android中有以下应用:当我们要执行耗时操作的同时还要对UI控件进行操作的时候,因为UI的操作不能放在子线程中运行,我们就可以把UI的操作部分传递到主线程中进行处理,把耗时操作留在子线程中进行,这样既不会阻塞进程,也完成了对UI的操作。
|