Android中的进程和线程学习笔记
一个android应用就是一个Linux进程,每个应用在各自的进程中运行,互不干扰,比较安全。
一个应用对应一个主线程,就是通常所说的UI线程,android遵守的就是单线程模型,所以说Ui操作不是线程安全的
学习参考:线程的几种状态转换
学习参考:Android 中三种启用线程的方法
1、通过继承Thread类,并改写run方法来实现一个线程·
new MyThread().start();
2、启用方式创建一个Runnable对象
new Thread(new MyRunnable()).start();
3、通过Handler启动线程
mHandler.post(mRunnable)
终止线程:
1、使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。
2、使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend、resume一样,也可能发生不可预料的结果)。 thread.stop()。
3、使用interrupt方法中断线程。
使用interrupt方法来终端线程可分为两种情况:
1、线程处于阻塞状态,如使用了sleep方法。
2、使用while(!isInterrupted()){……}来判断线程是否被中断。
在第一种情况下使用interrupt方法,sleep方法将抛出一个InterruptedException例外,而在第二种情况下线程将直接退出。
线程等待:
join()和sleep()方法
join()方法也可以理解为线程之间协作的一种方式,当两个线程需要顺序执行时,调用第一个线程的join()方法能使该线程阻塞,其依然通过wait()方法来实现的。另外,还有带时间参数的join()方法,在超出规定时间后,退出阻塞状态。同样的,其通过带时间参数的wait()方法实现而已。sleep()与wait()的相同之处在于它们都是通过等待阻塞线程,不同之处在于sleep()等待的是时间,wait()等待的是对象的锁。
Android几种进程
1、前台进程:即与用户正在交互的Activity或者Activity用到的Service等,如果系统内存不足时前台进程是最后被杀死的
2、可见进程:可以是处于暂停状态(onPause)的Activity或者绑定在其上的Service,即被用户可见,但由于失去了焦点而不能与用户交互
3、服务进程:其中运行着使用startService方法启动的Service,虽然不被用户可见,但是却是用户关心的,例如用户正在非音乐界面听的音乐或者正在非下载页面自己下载的文件等;当系统要空间运行前两者进程时才会被终止
4、后台进程:其中运行着执行onStop方法而停止的程序,但是却不是用户当前关心的,例如后台挂着的QQ,这样的进程系统一旦没了有内存就首先被杀死
5、空进程:不包含任何应用程序的程序组件的进程,这样的进程系统是一般不会让他存在的