定义 BaseActivity 的正确方法是什么

What is the correct way to define a BaseActivity

此问题具体针对 Android 以及可由所有其他活动扩展的基础 Activity 的使用。总的来说 w.r.t Java 我了解 abstract classes 的使用和功能。我的情况是,我有一个 Base Activity,其中包含一些常用常量、函数并实现了一些 Interfaces。我的问题是它应该是 abstract 还是我可以将它保留为正常 Activity。它是 abstract 是否有特定原因。

//Standard BaseActivity 
public abstract class BaseActivity extends Activity {
   //common code
}

//Usage 
public class MyActivity extends BaseActivity {
}

如果我按如下方式定义 BaseActivity,这似乎也有效

//Non Abstract Class
public class BaseActivity extends Activity {
}

因此问题是使用抽象有特定原因。 在这两种情况下,我都没有在 Manifest.

中定义 BaseActivity

BaseActivity的定义可以参考下面的方法

It’s always been a good idea to make a baseActivity in android project.

什么,我建议从 android.app.Activity 创建一个名为 baseActivity 的 activity 并使 3 个自定义 activity 从 baseActivity 扩展。

例如,

public abstract class MyAppBaseActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
}

还有你的习惯activity

public class MyCustomActivity extends MyAppBaseActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

注意,MyAppBaseActivity 是一个抽象class。原因是,我们不打算实例化它。这就是为什么您不需要在 AndroidManifest.xml 文件中添加 MyAppBaseActivity class。

Now the question is, why would you do that? Means, why you need to make an baseActivity class and then make your other activities as a subclass of it?

好吧,这里有一些非常普遍的原因

1. 您可以避免应用程序明智的常见 ui 任务的代码重复。假设您想在不同的活动中显示 progressDialog。只需编写代码在您的 baseActivity 中显示一个 progressDialog 并从其他 activity.

调用该方法

2. 您的应用程序菜单应该在不同的应用程序中保持一致。例如,您有一个设置屏幕。选项菜单包含导航到设置屏幕。您应该在整个应用程序中显示设置,意味着不管 activity。用户希望从应用程序的任何位置访问设置屏幕。此功能很容易实现,但您必须在每个 activity 中重写 onCreateOptionsMenu,或者,您可以在 baseActivity 中重写一次。