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

30

我对这两者之间的区别感到困惑。在我的应用程序中,我只使用了“Extends Activity”,并且应用程序完美运行,那么“Extends Application”的目的是什么?

你会在创建Android应用程序的第一个类上使用它吗?

谢谢。

5个回答

18

android.app.Application类是一个可选的功能,用于扩展和存储应用程序全局状态。虽然有其他方法可以实现此功能,但大多数应用程序不自定义此类。

然而,活动是定义应用程序每个主要阶段的组成部分。没有活动,就不可能构建应用程序。您将拥有一个主Activity类,并且这确实会通过“扩展Activity”来定义。


我不是故意吹毛求疵,但你的意思是“没有Activities就无法构建应用程序”吗?我只是想完全明白这一点。 - jcrowson
活动是应用程序的基本组成部分,就像页面是Web应用程序的一样。任何应用程序都至少有一个活动(尽管我想你可能可以没有一个小部件)。您的应用程序将需要一个入口活动。 - Jim Blackler
那么你可以开始编写扩展应用程序的类,就像使用意图启动活动一样吗? - jcrowson
无法启动Application类编号。 - Jim Blackler

11

看到区别的最佳方式是查看它的类层次结构。

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
仅作为前面答案的补充。 Application 类将作为单例对象存在,只要您的应用程序还在运行,它就会一直存在。
如果您不想处理通常的 Activity 生命周期,可以在您的 Application 扩展类中初始化全局组件,因为它将持续到进程结束。
例如,第三方库的初始化,如: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());
    }
}

0

应用程序负责整个应用

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

并且

在应用程序创建时使用它来根据用户的偏好重新创建整个应用程序


0

从用例角度来看,与使用情况的另一个区别是扩展 Application 的类通常具有 Application 上下文,这对于某些系统服务是必需的,例如 RoomDatabase 类,它包装了 SQLiteOpenHelper,以便只能创建一个实例(因为它们需要占用大量资源)。 因此,在这种情况下要 extends Application


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接