android进程和线程使用总结
Android是基于Linux的,所以一个安卓的进程其实就一个Linux进程,一般而言一个应用app就是一个安卓进程,也就是一个jvm虚拟机。但是不是说一个应用就只能有一个进程,如果你注意观察就会发现在manifest文件中Activity、application、Receiver、provider、Service标签都有一项为process的,没错这个就是用来指定组件运行在特定的进程的。如果在a
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,安卓中有关线程的操作算是做了一个简单德尔总结,当然限于本人的水平可能有不完整的地方或者有错误的地方, 欢迎留言指正!
更多推荐
所有评论(0)