每当我的Android应用程序启动时,我都需要执行一些代码,以便我可以初始化我的mainActivity菜单。菜单应该仅在应用程序启动时初始化,并且应该记住所选的菜单项,例如当我从其他子项Activies返回mainActivity时(即在按下后退或向上按钮之后)。
我已经尝试过使用onCreate事件,sharedPreference和getIntent()函数,但它们不适合那个pourpose。我需要与onLoad()HTML页面事件类似的东西。有什么帮助吗?
1)只要设备旋转,键盘打开,或者您切换应用程序,系统就会调用OnCreate,系统会决定是否需要回收一些内存并终止您的应用程序。 OnCreate与应用程序lyfecycle无关,而只与Activity Lifecycle有关。如果你没有在清单中使用android:launchmode = singleTop,当你使用“向上”按钮返回主活动时也会调用它。是的,你可以存储你以前的状态...结束恢复onResume,但它似乎很棘手,不自然。
2)每当我从其他子活动(在某些情况下)返回主Activity时,getIntent()都会返回相同的操作。
3)我可以使用sharedPreference永久存储一个值,但是当我重新启动应用程序时,该值具有设置的最后一个值,如果该应用程序刚刚启动,我无法知道这一点。 / p>
如果你不同意这些句子,请提供一个证明我错的例子。我尝试了很多解决方案。
答案 0 :(得分:3)
我试着给出一个完整的答案。 如果您只需要在应用程序启动时执行某些代码,那么您可以创建自定义Application类。你可以这样做:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//Here you can put your startup logic
}
}
然后,您必须修改manifest.xml文件中的标记。您需要告诉它应用程序必须是您定义的应用程序,您可以这样做:
<application
android:name=".MyApplication"
...
>
显然,我假设您的MyApplication类位于应用程序的基础包中。
但是,从我在你的帖子中阅读的内容来看,你需要一些与此不同的东西。您无法从应用程序设置UI,因为还没有用户界面,而UI只是一个活动(当然还有其子项)可以拥有的。我会进一步调查你在onCreate方法中做了什么。您是否每次在调用创建时设置所选菜单项?如果是这样,您可以在共享首选项中编写实际选定的菜单项。您可以在每次选择不同的菜单项时更新此值,然后,在onCreate中,您只需从共享首选项中读取此值并选择已保存的项目,而不仅仅是&#34;默认项目&#34;。
答案 1 :(得分:1)
这是我的例子:
public class MainApplication extends Application {
private static Resources mResources;
@Override
public void onCreate() {
super.onCreate();
mResources = this.getApplicationContext().getResources();
}
public static String getStringResource(int resId) {
return mResources.getString(resId);
}
}
不要忘记在AndroidManifest.xml中添加这个新应用程序:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.example">
<application
android:name=".MainApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
最后你可以像这样使用初始化:
public class DetailModel {
private String title;
public DetailModel(boolean aFlag) {
if(aFlag) {
title = movieData.getTitle();
} else {
title = MainApplication.getStringResource(R.string.default_title);
}
}
public String getTitle() {
return title;
}
public void setTitle(String t) {
this.title = t;
}
}
希望这有帮助