Android线程模型

在Android系统中,app第一次被启动时,系统会自动为这个app创建一个包含单一Thread的Linux进程。

一、进程

默认情况下,该App的所有组件都会在同一个进程和线程里。(main线程。也称UI线程)。也可以通过定义android:process属性指定组件运行在其他进程里。
好处是:让不同app共享一个Linux用户ID、赋予同样的权限。
当然,在lowmemory时,进程销毁也会将这些不同的app都销毁。

二、进程的生命周期

Linux会尽量的利用资源。Android也会尽可能长时间保持进程存活。在资源不足的情况下,就会按照进程 重要性进行清除,以释放资源。

    1.Foreground process 前台进程

    --- 正在使用的Activity、与正在使用的Activity绑定的Service、运行了startForeground的前台服务、正在执行生命周期函数的、正在接受onReceive方法的BroadcastReceiver

    2.Visible process 可见进程

    --- 还可以看到但不在交互的Acitivity。比如showDialog的、与可见但不交互的Activity绑定的Service

    3.Service Process 服务进程

    --- startService启动的服务。这种一般都是执行时间较长的mission。比如下载数据,播放音乐等等

    4.background Process 后台进程

    --- 不可见的Activity(onStop被调用的,按back键退出的Activity)系统为了方便下次使用,放在LRU里头,保留着。但结束了也不影响用户。

    5.empty Process 空进程

    --- 仅用作缓存,改善下次启动时间的。其实资源占用已经被释放了。

    小结

    --- 进程级别的评估用 当前进程运行的最高级别 定级。一个Serivce跟一个在交互的activity,那进程就按照  在交互的activity  为主。
    进程的级别会因为 其他进程的依赖关系而被提高。

三、主线程

    也称UI线程,负责事件派发调用,View绘制。Android的UI组件不是线程安全的。只能从UI线程访问,在程序上,这里应  遵循单线程模型。
    1.不要阻塞UI线程
    2.不要在UI线程外访问UI组件

四、工作线程

    要保证程序的响应,关键是不能阻塞UI线程。这需要多线程操作。
     public void clickSomething() {
        new Thread(new Runnable() {
            public void run() {
                Bitmap bitmap = loadBitmapFromInternet();
                mImageView.setImageBitmap(b);//#报错:不能从分线程访问主线程的View。
            }
        }).start();
<span style="text-align: center;">    </span><span style="font-family: Arial, Helvetica, sans-serif; text-align: center;">}</span>

解决方法:
    1.Activity.runOnUIThread
    2.View.post
    3.View.postXXXXX
    public void clickSomething() {
        new Thread(new Runnable() {
            public void run() {
                Bitmap bitmap = loadBitmapFromInternet();
                mImageView.post(new Runnable() {
                    Public void run() {
                        setImageBitmap(b);
                    }
                }
            }
        }).start();
    }
    4.比较好的办法:AsyncTask.

五、进程间通信

    进程间通信 通过IBinder方式进行的应遵照线程安全的原则。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值