Android是基于Linux的,所以一个安卓的进程其实就一个Linux进程,一般而言一个应用app就是一个安卓进程,也就是一个jvm虚拟机。但是不是说一个应用就只能有一个进程,如果你注意观察就会发现在manifest文件中Activity、application、Receiver、provider、Service标签都有一项为process的,没错这个就是用来指定组件运行在特定的进程的。如果在application设置就是指定该app运行的默认进程,如果在其他的4大组件设置就是设置该组件运行的进程,这样就可以指定组件运行在不同的进程里面,即使应用所在的jvm销毁了组件还是处于运行状态。

那么线程和进程又是什么关系呢?其实进程是由一个一个的线程组成的,线程是cup处理的基本单元,如果一个进程中没有了线程那么这个进程也就不复存在了。android中可以使用两种方式创建线程一个是继承Thread另一个是实现Runable接口。那么这两种方式有什么区别呢?一般也就两点吧:

1、第一点就是继承是单一的,使用的时候可能有局限性。

2、第二点就是使用Runable可以实现资源的共享。

第一点相信大家都是知道的,就不多说了,那么如何实现资源的共享呢?请看下面代码:

Thread使用:

		class MyThread extends Thread {
			int count = 0;

			@Override
			public void run() {
				super.run();
				while (count < 10) {
					count++;
				}
			}
		}
		new MyThread().start();
		new MyThread().start();
Runable使用:

class MyThread implements Runnable {
			int count = 0;

			@Override
			public void run() {
				while (count < 10) {
					count++;
				}
			}
		}
		MyThread run = new MyThread();
		new Thread(run).start();
		new Thread(run).start();

仔细观察可以发现在使用Thread的时候每次都创建了一个新的对象,所以count变量自然都是不同的,可是使用Runable的时候只创建了一个对象,这样自然是达到了资源的共享。

大家都知道安卓不允许在子线程中操作UI控件(android.view包和android.widget包),也不允许主线程中做耗时操作。当然有限制一定会有解决办法的,下面我们就来总结一下使用方法。

主线程操作耗时:

1、new 一个子线程去做,handler返回数据。

2、使用异步任务。

3、创建一个Service在Service中创建子线程操作,用广播返回数据。

子线程操作UI:

1、Activity.runOnUiThread();

2、View.post()或者View.postDelayed()

3、在子线程中发消息,主线程使用handler更新UI。

4、使用异步任务

扫描关注我的微信公众号:



ok,安卓中有关线程的操作算是做了一个简单德尔总结,当然限于本人的水平可能有不完整的地方或者有错误的地方, 欢迎留言指正!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐