2015-05-21 2 views
-1

Кто-то спросил меня, как AsyncTask, Thread, Runnable работает на уровне приложений или работает на уровне активности?Темы для Android - это уровень приложения или уровень активности?

Все потоки выполняют некоторую работу в фоновом режиме и могут или не могут возвращать выходные данные в основной поток (активность/фрагмент).

Например, AsyncTask.execute() и в onPostExecute() Я верну некоторые данные. В промежутке между doInBackground и до onPostExecute, если I/OS убивает активность, чем onPostExecute, передайте данные активности, которая больше не доступна, но внутри метода обратного вызова сначала проверяю, работает ли действие, чем в противном случае ничего не делать.

Это означает, что потоки выполняются на уровне приложения am i right?

ответ

0

Резьба работает на уровне приложений.

Деятельность - это просто компоненты приложения для организации вашего кода.

Когда приложение убито, процесс, выполняющий все ваши потоки, прекращается.

Для получения дополнительной информации: http://developer.android.com/guide/components/processes-and-threads.html

+0

Практически - но приложения не имеют соответствия 1: 1 процессам. –

+0

Я никогда не слышал о приложении, использующем несколько процессов, кроме сервисов. Но хорошо знать. –

0

Во-первых, мы можем проверить определение этих классов.

с выполняемым представляет собой интерфейс, определенный, как показано ниже:

package java.lang; 

public interface Runnable { 
    void run(); 
} 

нить класс реализует 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!"); 
    } 
} 

Как вы сказали, на главном ad, тем временем Runnable может запускаться или не работать в одном потоке, потому что это только интерфейс, просто раздел кода.

AsyncTask не работает в основном потоке, он работает с потоком, отличным от UI, поэтому он может выполнять несколько параллельных заданий, пока активность работает в основном потоке.

Все объекты (Activity, AsyncTask, Thread) находятся под контролем срока службы приложения.

0

Такие темы, как AsyncTask, Thread, Runnable запускаются на уровне приложений или работают на уровне активности?

Они работают на Application level, потому что в то время как Activity may be destroyed AsyncTask или Thread загружает файл из Web.

И еще одна вещь при использовании такого operation использует getApplicationContext(), иначе утечки памяти.

Смежные вопросы