Android с использованием общих настроек и действия Dispatcher, чтобы вернуться к последнему действию (после перезагрузки телефона)

Я использую общие настройки, чтобы сохранить состояние моего приложения, чтобы иметь возможность перейти к последнему действию до того, как мой 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 ответа

Решение

Используйте этот новый код

    <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>

ОБНОВЛЕНИЕ: вызов финиша () гораздо более уместен, добавьте это ниже

startActivity(new Intent(this, activityClass));
finish();

Вы указываете, что MainActivity открыта с приложением, поскольку у него есть параметры

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

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

Если вы хотите, чтобы ваш процесс работал, вам нужно сделать DispatcherActivity единственным основным видом деятельности вашего приложения, установив для него эти параметры.

MainActivity - это ваш лаунчер, поэтому он всегда запускается.

Решение - В MainActivity onCreate прочитайте данные из SharedPreference, если это Jfp1, откройте экран JFp1, если это другое действие, запустите другое действие и затем вызовите finish() для основного действия.

Другие вопросы по тегам