Android线程是应用程序级别还是活动级别?

时间:2015-05-21 14:59:56

标签: java android multithreading android-asynctask

有人问我,AsyncTaskThreadRunnable这样的话题在应用程序级别上运行,或者是否在活动级别上运行?

所有线程都在后台工作,可能会也可能不会将输出返回到主线程(activity / fragment)。

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

这意味着线程在应用程序级别运行我是不是正确?

3 个答案:

答案 0 :(得分:0)

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

活动只是组织代码的应用程序组件。

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

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

答案 1 :(得分:0)

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

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,AsyncTask,Thread)。

答案 2 :(得分:0)

  

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

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

在执行此类operation时还有一件事情是使用getApplicationContext(),否则会导致内存泄漏。