Android 使用共享首选项和 Dispatcher activity,回到上一个 activity(重启后 phone)
Android using shared preference and Dispatcher activity, to get back to the last activity (after reboot the phone)
我正在使用共享首选项来保存我的应用程序的状态,以便能够在我的 Android 手 phone 重新启动之前到达最后一个 activity-编辑。我的目的是当 Android 系统管理内存并推出我的应用程序时,当用户重新进入应用程序时,他们将到达我的应用程序的最后一个 Activity 和屏幕。
这是我的一些代码:
首先是 DispatcherActivity.java :
> package com.lm.rosary;
>
> import android.app.Activity; import android.content.Intent; import
> android.content.SharedPreferences; import android.os.Bundle;
>
>
> public class DispatcherActivity extends Activity {
>
> @Override
> protected void onCreate(Bundle savedInstanceState) {
> super.onCreate(savedInstanceState);
>
> Class<?> activityClass;
>
> try {
> SharedPreferences prefs = getSharedPreferences("X", MODE_PRIVATE);
> activityClass = Class.forName(
> prefs.getString("lastActivity", Jfp1.class.getName()));
> } catch(ClassNotFoundException ex) {
> activityClass = Jfp1.class;
> }
>
> startActivity(new Intent(this, activityClass));
> } }
第二个是我的示例 activity ( Jfp1.java ),我希望用户在 phone 重新启动或重新启动时返回到此屏幕。
Jfp1.java :
> import android.content.SharedPreferences; import
> android.content.SharedPreferences.Editor;
>
>
> public class Jfp1 extends Activity implements OnClickListener { ....
>
> SharedPreferences prefs;
> SharedPreferences.Editor editor;
> .... @Override protected void onPause() { super.onPause();
> SharedPreferences prefs = getSharedPreferences("X", MODE_PRIVATE);
> Editor editor = prefs.edit();
> editor.putString("lastActivity", getClass().getName());
> editor.commit(); }
我的应用程序,从 MainActivity 到 Mysterytopray 和 Jfp1 class。 DispatcherActivity.java 位于单独的 class.
和往常一样我的第三个清单:
> <activity
> android:name=".MainActivity"
> android:label="@string/app_name" >
> <intent-filter>
> <action android:name="android.intent.action.MAIN" />
>
> <category android:name="android.intent.category.LAUNCHER" />
> </intent-filter>
> </activity>
>
> <activity
> android:name="com.lm.rosary.DispatcherActivity"
> android:label="@string/app_name" >
> <intent-filter>
> <action android:name="android.intent.action.MAIN" />
> </intent-filter>
> </activity>
>
> <activity
> android:name="com.lm.rosary.Jfp1"
> android:label="@string/app_name" >
> </activity>
我在 Jfp1 屏幕上,我重新启动了 HP。但是在 HP 重新启动后,我点击我的应用程序图标,但 Jfp1 activity 并没有首先出现。 Main Activity 先来。但实际上,我希望它回到最后一个 Activity 即 Jfp1.java.
我在 Android 方面没有经验,所以任何人都请给我一些建议并更正我的编码。非常感谢。
您的清单指定 MainActivity 是与应用程序一起打开的那个,因为它具有选项
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
如果您想让您的进程正常运行,您必须通过在 DispatcherActivity 上设置这些选项,使您成为应用程序的唯一主要 activity。
MainActivity 是您的启动器,因此它将始终启动。
解决方案 - 如果是 Jfp1,则在 MainActivity onCreate 中从 SharedPreference 读取数据,如果是其他,则打开 JFp1 屏幕 activity 启动另一个 activity,然后在主 activity 上调用 finish() .
使用这个新代码
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
</activity>
<activity
android:name="com.lm.rosary.DispatcherActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.lm.rosary.Jfp1"
android:label="@string/app_name" >
</activity>
更新:
调用 finish() 更合适,在下面添加
startActivity(new Intent(this, activityClass));
finish();
我正在使用共享首选项来保存我的应用程序的状态,以便能够在我的 Android 手 phone 重新启动之前到达最后一个 activity-编辑。我的目的是当 Android 系统管理内存并推出我的应用程序时,当用户重新进入应用程序时,他们将到达我的应用程序的最后一个 Activity 和屏幕。
这是我的一些代码:
首先是 DispatcherActivity.java :
> package com.lm.rosary;
>
> import android.app.Activity; import android.content.Intent; import
> android.content.SharedPreferences; import android.os.Bundle;
>
>
> public class DispatcherActivity extends Activity {
>
> @Override
> protected void onCreate(Bundle savedInstanceState) {
> super.onCreate(savedInstanceState);
>
> Class<?> activityClass;
>
> try {
> SharedPreferences prefs = getSharedPreferences("X", MODE_PRIVATE);
> activityClass = Class.forName(
> prefs.getString("lastActivity", Jfp1.class.getName()));
> } catch(ClassNotFoundException ex) {
> activityClass = Jfp1.class;
> }
>
> startActivity(new Intent(this, activityClass));
> } }
第二个是我的示例 activity ( Jfp1.java ),我希望用户在 phone 重新启动或重新启动时返回到此屏幕。 Jfp1.java :
> import android.content.SharedPreferences; import
> android.content.SharedPreferences.Editor;
>
>
> public class Jfp1 extends Activity implements OnClickListener { ....
>
> SharedPreferences prefs;
> SharedPreferences.Editor editor;
> .... @Override protected void onPause() { super.onPause();
> SharedPreferences prefs = getSharedPreferences("X", MODE_PRIVATE);
> Editor editor = prefs.edit();
> editor.putString("lastActivity", getClass().getName());
> editor.commit(); }
我的应用程序,从 MainActivity 到 Mysterytopray 和 Jfp1 class。 DispatcherActivity.java 位于单独的 class.
和往常一样我的第三个清单:
> <activity
> android:name=".MainActivity"
> android:label="@string/app_name" >
> <intent-filter>
> <action android:name="android.intent.action.MAIN" />
>
> <category android:name="android.intent.category.LAUNCHER" />
> </intent-filter>
> </activity>
>
> <activity
> android:name="com.lm.rosary.DispatcherActivity"
> android:label="@string/app_name" >
> <intent-filter>
> <action android:name="android.intent.action.MAIN" />
> </intent-filter>
> </activity>
>
> <activity
> android:name="com.lm.rosary.Jfp1"
> android:label="@string/app_name" >
> </activity>
我在 Jfp1 屏幕上,我重新启动了 HP。但是在 HP 重新启动后,我点击我的应用程序图标,但 Jfp1 activity 并没有首先出现。 Main Activity 先来。但实际上,我希望它回到最后一个 Activity 即 Jfp1.java.
我在 Android 方面没有经验,所以任何人都请给我一些建议并更正我的编码。非常感谢。
您的清单指定 MainActivity 是与应用程序一起打开的那个,因为它具有选项
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
如果您想让您的进程正常运行,您必须通过在 DispatcherActivity 上设置这些选项,使您成为应用程序的唯一主要 activity。
MainActivity 是您的启动器,因此它将始终启动。
解决方案 - 如果是 Jfp1,则在 MainActivity onCreate 中从 SharedPreference 读取数据,如果是其他,则打开 JFp1 屏幕 activity 启动另一个 activity,然后在主 activity 上调用 finish() .
使用这个新代码
<activity android:name=".MainActivity" android:label="@string/app_name" > </activity> <activity android:name="com.lm.rosary.DispatcherActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.lm.rosary.Jfp1" android:label="@string/app_name" > </activity>
更新: 调用 finish() 更合适,在下面添加
startActivity(new Intent(this, activityClass));
finish();