2010-04-06 2 views
23

Я смущен относительно разницы между этими двумя. В моем приложении я только что использовал Extends Activity, и приложение работает отлично, поэтому в чем цель Extends Application ?.В чем разница между Extends Application и Extends Activity в Android?

Вы бы использовали его в первом классе, создаваемом в приложении для Android?

Спасибо.

ответ

12

Класс android.app.Application является дополнительным средством для расширения и хранения глобального приложения. Существуют и другие способы сделать это, поэтому большинство приложений не настраивают этот класс.

Деятельность, однако, определяет каждый важный этап вашего приложения. Невозможно создать приложение без действий. У вас будет основной класс Activity, и это действительно будет определено с помощью функции «extends Activity».

+0

Я не имею в виду быть педантичным, но вы имели в виду: «Было бы невозможно создать приложение без действий» ?. Я просто хочу полностью понять это. – jcrowson

+0

Well Activites - это строительный блок приложений. Как страницы для веб-приложения. Любое приложение будет иметь хотя бы один (хотя вы можете иметь виджет без него, я полагаю). Вашему приложению потребуется элемент «Входная точка». –

+0

Итак, можете ли вы начинать занятия, расширяющие приложение, подобно началу действий с использованием намерений? – jcrowson

5

Лучший способ увидеть различие будет видеть это иерархия классов

Activity

java.lang.Object 
    ↳ android.content.Context 
     ↳ android.content.ContextWrapper 
      ↳ android.view.ContextThemeWrapper 
       ↳ android.app.Activity 

И Application

java.lang.Object 
↳ android.content.Context 
    ↳ android.content.ContextWrapper 
     ↳ android.app.Application 

Применения что живет до вашего Android процесс приложения будет убит. Вы можете использовать это для хранения данных, специфичных для приложения (до тех пор, пока ваше приложение активно), которые могут использоваться для различных действий. Примечание. Я не говорю, что вам следует ... Общие предпочтения могут быть другими подходящими способами в зависимости от вашего использования. Также, чтобы быть понятным, вы не можете использовать свое приложение для запуска своего приложения, в отличие от действия запуска, которое вы даете в вашем файле манифеста.

Вы можете использовать свой собственный пользовательский класс приложений следующим образом

<application 
    android:name="icom.osfg.test.app.AppController" 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/MyTheme" > 
    <!-- all the activities goes here --> 
</application> 

где

AppController extends Application 
1

Просто добавить к предыдущим ответам.

Класс Application будет синглом, который будет жить до тех пор, пока ваше приложение будет живым.

Вы можете инициализировать глобальные компоненты в своем расширенном классе Application, так как он будет длиться до тех пор, пока ваш процесс не погибнет, если вы не хотите обрабатывать обычный Activitylifecycle.

Например, инициализация сторонних библиотек: Parse, CanaryLeak, Crashlytics.

public class App extends Application { 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     Parse.initialize(this); 
     LeakCanary.install(this); 
     Fabric.with(this, new Crashlytics()); 
    } 
} 
Смежные вопросы