Android使用共享首选项和Dispatcher活动,以返回上一个活动(重启手机后)

时间:2016-02-25 08:07:25

标签: android android-activity sharedpreferences dispatcher android-reboot

我正在使用共享首选项来保存我的应用程序的状态,以便能够在我的Android手机重新启动之前进入上一个活动。我的目的是当Android系统管理内存并推出我的应用程序时,当用户重新进入应用程序时,他们将进入我的应用程序的最后一个活动和屏幕。

这是我的一些代码:

首先是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));
>       }   }

其次是我的示例活动(Jfp1.java),我希望用户在手机重新启动或重新启动时返回此屏幕。 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类。 DispatcherActivity.java位于单独的类中。

第三个我的清单照常:

> <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活动。首先是主要活动。但实际上,我希望它回到最后一个Jfp1.java的活动。

我在Android上没有经验,所以任何人都请给我一些建议并更正我的编码。非常感谢。

3 个答案:

答案 0 :(得分:1)

您的清单指定MainActivity是使用应用程序打开的,因为它具有选项

<intent-filter>
    <action android:name="android.intent.action.MAIN" />

    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

如果您希望自己的流程正常运行,则必须通过在其上设置这些选项,使DispatcherActivity成为您应用的唯一主要活动。

答案 1 :(得分:1)

MainActivity是您的启动器,因此它始终会启动。

解决方案 - 在MainActivity onCreate中从SharedPreference读取数据,如果它是Jfp1,则打开JFp1屏幕,如果是其他活动则启动另一个活动,然后在主要活动上调用finish()。

答案 2 :(得分:1)

使用此新代码

    <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();