Android线程的一些有关问题
Android线程的一些问题? ? ? ? ? 由于刚刚接触android还不是完全了解其内部机制,但是其毕竟是使用java开发
Android线程的一些问题
? ? ? ? ? 由于刚刚接触android还不是完全了解其内部机制,但是其毕竟是使用java开发,所以对于语言格式还是基本没有太大的区别,多的只是一些配置文件等等。但是关于线程这方面,却有一些区别。大家都知道,android是linux上的操作系统,后期才被移植到手机上。每当程序启动,会启动一个进程表示程序本身,然后一个线程即主线程执行一定任务。在内存不足时,android会自动释放一些低级进程(对于进程等级,android本身有其自己的算法,普通情况从高到低为 前台进程>可见进程>服务进程>后台进程>空进程)。
? ? ? ? ? ?对于android的线程,首先先了解其单线程模型。在android中,其启动的主线程负责UI界面的控制与处理如点击事件、画图操作等等,并且不允许其他线程使用或更改UI界面。总之:“在开发Android应用时必须遵守单线程模型的原则: Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行”。如果幕后的线程来执行UI对象,Android就会发出错误讯息?CalledFromWrongThreadException。这样如果以后遇到此问题就可以检查一下线程是否违反了原则。
? ? ? 但是当主线程想要借助其他线程处理UI或者绘制图像就出现了一定问题。为了解决类似的问题,Android设计了一个Message Queue(消息队列), 线程间可以通过该 Message Queue 并结合Handler和Looper组件进行信息交换。Message类:线程之间用来通信的对象。 ? Handler类:就是message的主要处理者可以在一个线程的run方法中调用handler对象的 postMessage或sendMessage方法来实现,Android程序内部维护着一个消息队列,会轮训处理这些,如果你是Win32程序员可以很好理解这些消息处理,不过相对于Android来说没有提供 PreTranslateMessage这些干涉内部的方法。 ??Looper类:其实Android中每一个Thread都跟着一个Looper,Looper可以帮助Thread维护一个消息队列,并可以与一个handler绑定,来实现一个线程同步机制。其实听起来很复杂,但是实际在操作上其实很容易理解。由于我也是初学,没有深入理解。?所以这里也就简单说一下他们的使用方法。简单来说你想让那个线程执行代码,例如让主线程实现UI界面的操作,就获取主线程的looper。然后创建一个你自己的handle类绑定这个looper。代码如下:
? ? ?
?
?