对于我添加到我的应用程序的每个Activity,我注意到在Activity的初始化中使用了很多类似的代码。一个带有静态方法的辅助类来包装这个类似的代码似乎是要走的路。
我首先想到的是单身人士课程。我可以添加静态方法/变量并在整个应用程序中使用它们。我还没有真正尝试过在Android应用程序中如何工作。再多搜索一下,我看到了创建一个扩展Application
的类的问题。为此我做了一个简单的测试:
public class MyApp extends Application {
public static String DEMOTEXT = "WORKING!";
public static void ShowToast(Context context, String text) {
Toast.makeText(context, text, Toast.LENGTH_SHORT).show();
}
}
MyApp.ShowToast(this, MyApp.DEMOTEXT); // Placed on onCreate of some Activity
这完全符合我的预期。这是继续Android的方式还是有更好的约定?这样做时我还应该考虑其他什么?
顺便问一下,我应该在字符串上使用final
关键字吗?这个方法怎么样?
编辑:我刚看过这个:
通常不需要子类Application。在大多数情况下, 静态单例可以在更模块化的情况下提供相同的功能 办法。如果您的单身人士需要全局上下文(例如注册 广播接收器),可以给出一个检索它的功能 内部使用Context.getApplicationContext()的Context 首先构建单身人士。
http://developer.android.com/reference/android/app/Application.html
我应该使用单身吗?
答案 0 :(得分:3)
Application主要用于全局应用程序初始化。您可以创建自己的类,覆盖Application.onCreate()并在那里初始化静态应用程序数据。
别忘了在AndroidMainfest.xml中声明它:
<application
android:icon="@drawable/icon"
android:label="@string/app_name"
android:name="your.package.path.to.MyApp">
静态助手类就像你一样
惯例是在第一个位置使用小写字母,所以MyApp.showToast(...)
。
如果您希望避免在其他地方出现疯狂(因为它应该是一个暴力),您可以使用final
作为字符串。
// this would allow ...
public static String DEMOTEXT = "WORKING!";
// ... to do this somewhere else
MyApp.DEMOTEXT = "NOT WORKING!"
答案 1 :(得分:2)
我没有试过这个,但我认为你也应该能够做到这一点。
public class MyActivity extends Activity {
private static final String DEMOTEXT = "WORKING!";
@Override
public void onCreate(Bundle bundle)
{
super.onCreate(bundle);
Toast.makeText(this, DEMOTEXT, Toast.LENGTH_SHORT).show();
}
}
现在,对于需要使用初始化的所有活动,只需扩展基本活动类。
public class SomeActivity extends MyActivity {
...
// Should display the toast on create
...
}
答案 2 :(得分:1)
是的,只需使用单身人士。那么在这种情况下,如果你的方法是静态的,你甚至不需要单例。只是一个静态方法的类。