`

android process and thread

 
阅读更多
前三周android预研中,把可能用到的技术点都识别了,并完成了一个DEMO。之后一直在等UCD的同事把应用界面设计出来。。等待过程中有点无聊,就把android in action看完了,UCD的设计结果还是没出来,于是继续看google的android文档。刚才看到process and thread这节,总结整理一下

通过在manifest中配置,是可以改变android系统的默认行为的,不过好像没想到有什么场景需要这样做,所以这篇博客只总结默认配置下的情况

1. 一个application对应一个process

2. 所有的component(包括activity,service)都跑在同一个thread中,这个thread是main线程,也叫UI thread。也就是如果应用不做额外的编码,所有的组件都跑在同一个线程中。。

3. android还是比较好心的,it tries to maintain an application process for as long as possible

4. 但在资源不够的情况下,android系统就开始kill process了。优先级包括,foreground process、visible process、service process、background process、empty process。从后往前依次kill

5. 进程之间有依赖关系的话,process that is serving another process can never be ranked lower than the process it is serving

6. 由于前面2提到的,默认所有组件都跑在UI thread里,页面UI响应会很不好,所以要编码解决这个问题。需要遵循2条规则:
A. 不能阻塞UI thread
B. 不要在UI thread之外访问UI组件
public void onClick(View v) {
    new Thread(new Runnable() {
        public void run() {
            Bitmap b = loadImageFromNetwork("http://example.com/image.png");
            mImageView.setImageBitmap(b);
        }
    }).start();
}

上面的代码就违反了规则2,在worker thread中访问了UI组件mImageView
public void onClick(View v) {
    new Thread(new Runnable() {
        public void run() {
            final Bitmap bitmap = loadImageFromNetwork("http://example.com/image.png");
            mImageView.post(new Runnable() {
                public void run() {
                    mImageView.setImageBitmap(bitmap);
                }
            });
        }
    }).start();
}

上面的代码就比较好了,但是可以用AsyncTask来进一步优化
public void onClick(View v) {
    new DownloadImageTask().execute("http://example.com/image.png");
}

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
    
    protected Bitmap doInBackground(String... urls) {
        return loadImageFromNetwork(urls[0]);
    }
    
    protected void onPostExecute(Bitmap result) {
        mImageView.setImageBitmap(result);
    }
}
分享到:
评论
1 楼 kyfxbl 2011-07-18  
关于process的rank,分别说明如下。

Foreground Process,前台进程,指的是满足以下任一条件的进程:
1. 持有onResume()调用后的activity,也就是正在与用户进行交互的activity
2. 持有绑定到前台activity的service
3. 持有run in foreground的service
4. 持有正在执行onCreate()、onStart()、onDestroy()的service
5. 持有正在执行onReceive()的BroadcastReceiver

Visible Process,可视进程,指的是满足以下任一条件的进程:
1. 持有onPause()调用后的activity,也就是该activity仍然是可见的,但是不是focus
2. 持有绑定到visible activity的service

Servive Process,服务进程,持有用startService()启动的service的进程

Background Process,后台进程,持有已经调用了onStop()方法的activity的进程

Empty Process,空进程。这种进程中的所有组件都已经释放,已经不再持有任何组件

相关推荐

    Asynchronous Android Programming

    Get familiar with the Android process model and low-level concurrent and multithread constructs available on the Android SDK Use AsyncTask to load data in the background, delivering progress results ...

    Android官方api文档完整版+androidstudio快捷键

    Note that unlike other application components, calls on to the IBinder interface returned here may not happen on the main thread of the process. More information about this can be found in Application...

    Android.Games.Practical.Programming.By.Example.Quickstart

    This unit also goes into detail on how to write the main thread and view for your app. Unit 3, Sprites and Objects, explains how to create sprites, major characters, monsters, and objects. You'll ...

    android中UI主线程与子线程深入分析

    本文较为深入的分析了android中UI主线程与子线程。分享给大家供大家参考。...一个Android 程序默认情况下也只有一个Process,但一个Process下却可以有许多个Thread。在这么多Thread当中,有一个Thread,我们称之为UI

    Android开发指南全中文版

    - **进程(Process):** Android应用程序默认运行在其独立的Linux进程中。 - **线程(Thread):** Android应用程序可以在主线程之外创建额外的线程来执行耗时操作。 - **远程过程调用(Remote Procedure Calls):** 通过...

    Android开发指南中文版

    - **进程 - Process** 每个Android应用程序通常都会有自己的Linux进程。 - **线程 - Thread** 线程允许在应用程序内部并发执行多个任务。 - **远程过程调用 - Remote Procedure Call (RPC)** 允许应用程序调用另...

    Android代码-Yasp

    If you only need to persist simple values and your application runs in a single process SharedPreferences is probably enough for you. It is a good default option. There are some situations where ...

    android开发学习

    - **进程 (Process)**: 默认情况下,每个 Android 应用程序都在自己的 Linux 进程中运行。这意味着应用程序之间的代码通常是隔离的。 - **线程 (Thread)**: Android 应用程序通常在一个主线程上运行 UI 相关的操作。...

    HTML5 GAMES Creating Fun with HTML5 CSS3 and WebGL 英文PDF

    - **Developing Mobile Web Applications**: Overviewed as a process of designing and developing web apps that work seamlessly across different devices and platforms. - **Write once, read many**: ...

    Android实现自定义Crash handler记录崩溃信息实例代码

    android.os.Process.killProcess(Process.myPid()); } } // 其他辅助方法如获取设备信息、保存异常信息到文件等 } ``` 在`init()`方法中,我们首先获取当前的默认异常处理器,并将其替换为我们自定义的`...

    android 捕获系统异常并上传日志具体实现

    android.os.Process.killProcess(android.os.Process.myPid()); } // 其他辅助方法... } ``` 在上述代码中,`getVersionInfo()`用于获取应用的版本信息,`getMobileInfo()`用于收集设备的硬件信息,而`...

    Android中的Looper对象详细介绍

    Java 官网对Looper对象的说明: public class Looperextends ObjectClass ... to create one, call prepare() in the thread that is to run the loop, and then loop() to have it process messages until the loop is

    Android使用CrashHandler来获取应用的crash信息的方法

    android.os.Process.killProcess(android.os.Process.myPid()); } // 省略保存异常信息到文件和发送崩溃报告的具体实现 } ``` 为了确保我们的异常处理器能够正常工作,我们需要在应用启动时初始化它,通常在`...

    软件测试课程报告--游戏设计与开发.doc

    The report primarily focuses on the software testing process involved in the design and development of a classic Snake game for the Android platform. 首先,对于软件测试的理解,它是一种系统性的活动...

    EurekaLog_7.5.0.0_Enterprise

    4)....Added "--el_injectjcl", "--el_createjcl", and "--el_createdbg" command-line options for ecc32/emake to inject JEDI/JCL debug info, create .jdbg file, and create .dbg file (Microsoft debug format...

    ICS delphixe10源码版

    ICS V9 is in early development and is planned to support Android. There are no current plans for ICS for iOS. Version Control repository: --------------------------- svn://svn.overbyte.be/ics or ...

    电脑专业英语1500词

    4. **操作系统**:如Windows、Linux、macOS等,其相关的术语有进程(process)、线程(thread)、内存管理(memory management)、文件系统(file system)等。理解这些概念有助于进行系统级编程和调试。 5. **网络...

    lib:AppBox应用沙箱的lib模块

    5. **进程和线程隔离(Process and Thread Isolation)**:应用沙箱可能需要创建独立的进程或线程来运行每个应用,这样即使某个应用崩溃,也不会影响其他应用或整个系统。 6. **API限制(API Restriction)**:通过白...

    ap6212a0_a33_sc3817r_服务器验证通过_bt已经通了_wifi需要修改配置_需要再次验证_20170626_1549.7z

    # frameworks/native/data/etc/android.hardware.touchscreen.multitouch.jazzhand.xml:system/etc/permissions/android.hardware.touchscreen.multitouch.jazzhand.xml \ # frameworks/native/data/etc/android....

Global site tag (gtag.js) - Google Analytics