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() для основного действия.