Android中的Extends Application和Extends Activity有什么区别?

时间:2010-04-06 21:52:41

标签: java android

我对两者之间的区别感到困惑。在我的应用程序中,我刚刚使用了Extends Activity,应用程序运行正常,那么Extends Application的目的是什么?

您是否会在Android应用程序中创建的第一个类上使用它?

感谢。

5 个答案:

答案 0 :(得分:14)

android.app.Application类是一个用于扩展和存储应用程序全局状态的可选工具。还有其他方法可以做到这一点,因此大多数应用程序都不会自定义此类。

然而,活动定义了应用程序的每个主要阶段。没有活动就无法构建应用程序。您将拥有一个主Activity类,这确实将使用'extends Activity'进行定义。

答案 1 :(得分:7)

查看差异的最佳方法是查看它的类层次结构

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类,如下所示

<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

答案 2 :(得分:1)

只是添加到以前的答案。

Application课程将是一个单身人士,只要你的应用程序还活着就会生效。

您可以在Application扩展类中初始化全局组件,因为如果您不想处理通常的Activity lifecycle,它会持续到您的进程死亡。

例如,初始化第三方库,如: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());
    }
}

答案 3 :(得分:0)

应用负责整个应用

您在应用程序清单中添加启动器活动

在创建应用时用于在用户首选项后重新创建整个应用

答案 4 :(得分:0)

从用例角度来看的另一个不同之处是,扩展Application的类通常具有某些系统服务所需的Application上下文,例如RoomDatabase类,该类包装了SQLiteOpenHelper,因此只能创建一个实例(因为它们是资源大量),因此在这种情况下扩展了应用程序