【问题标题】:Android threads are application level or activity level?Android线程是应用程序级别还是活动级别?
【发布时间】:2015-05-21 14:59:56
【问题描述】:

有人问我像AsyncTaskThreadRunnable 这样的线程是在应用程序级别运行还是在活动级别运行?

所有线程都在后台做一些工作,可能会也可能不会将输出返回到主线程(活动/片段)。

例如我做AsyncTask.execute()onPostExecute() 我会返回一些数据。在doInBackgroundonPostExecute 之前之间,如果 I/OS 杀死活动而不是 onPostExecute 将数据传递给不再可用但在回调方法中的活动,我首先检查活动是否正在运行而不是继续,否则什么也不做。

这意味着线程在应用程序级别运行,对吗?

【问题讨论】:

    标签: java android multithreading android-asynctask


    【解决方案1】:

    线程在应用程序级别运行。

    Activity 只是用于组织代码的应用程序组件。

    当应用程序被终止时,运行所有线程的进程将终止。

    更多信息: http://developer.android.com/guide/components/processes-and-threads.html

    【讨论】:

    • 几乎 - 但应用程序与进程没有 1:1 的对应关系。
    • 我从来没有听说过一个应用程序运行多个进程,除了服务。但很高兴知道。
    【解决方案2】:

    首先,我们可以检查这些类的定义。

    Runnable是一个接口,定义如下:

    package java.lang;
    
    public interface Runnable {
        void run();
    }
    

    Thread是一个实现Runnable接口的类,定义如下:

    package java.lang;
    
    public class Thread implements Runnable {
        public Thread() {
            throw new RuntimeException("Stub!");
        }
    }
    

    AsyncTask 是一个抽象类,定义如下:

    package android.os;
    
    public abstract class AsyncTask<Params, Progress, Result> {
    
        public final AsyncTask<Params, Progress, Result> execute(Params... params) {
            throw new RuntimeException("Stub!");
        }
    }
    

    正如你所说,一个 Activity 在主线程上运行,同时一个 Runnable 可能会或可能不会在同一个线程上运行,因为它只是一个接口,只是一段代码。

    AsyncTask 不在主线程上运行,它在非 UI 线程上运行,因此它可以在 Activity 在主线程上运行时执行一些并行作业。

    应用程序生命周期控制下的所有对象(Activity、AsyncTask、Thread)。

    【讨论】:

      【解决方案3】:

      AsyncTask、Thread、Runnable 等线程在应用程序级别运行还是在活动级别运行?

      它们在 Application level 上运行,因为 Activity may be destroyed 而 AsyncTask 或 Thread 正在从 Web 下载文件。

      还有一件事当做这样的operation 使用getApplicationContext() 否则内存泄漏。

      【讨论】:

        猜你喜欢
        • 2015-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-05
        • 1970-01-01
        • 2018-02-25
        • 2012-04-23
        相关资源
        最近更新 更多