Хорошо, я наконец нашел решение этой проблемы. В конце концов, наследование приложения было правильным вариантом. Я сохраняю последнее приостановленное действие, и если тот же самый будет возобновлен в любое время, я покажу диалог. Также я должен позаботиться о изменениях конфигурации, которые заставляют активность перезапускаться. Если кто-то получает в той же проблемой, как и я, Херес код:
package at.***.**********.util;
import org.holoeverywhere.app.Application;
import android.app.Activity;
import android.content.ComponentCallbacks;
import android.content.res.Configuration;
import android.os.Bundle;
import android.util.Log;
public class MyCustomApplication extends Application {
private String lastActivity = "";
private Boolean configChanged = false;
public Boolean getConfigChanged() { return configChanged; }
public void setConfigChanged(Boolean configChanged) { this.configChanged = configChanged; }
private ActivityLifecycleCallbacks activityCallback = new ActivityLifecycleCallbacks() {
@Override
public void onActivityStopped(Activity activity) { }
@Override
public void onActivityStarted(Activity activity) { }
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) { }
@Override
public void onActivityDestroyed(Activity activity) { }
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) { }
@Override
public void onActivityResumed(Activity activity) {
if (activity.getClass().getName().equals(lastActivity) && !getConfigChanged()) {
Log.v(activity.getClass().getName(), "Make activity show password dialog");
}
setConfigChanged(false);
}
@Override
public void onActivityPaused(Activity activity) {
lastActivity = activity.getClass().getName();
}
};
private ComponentCallbacks componentCallback = new ComponentCallbacks() {
@Override
public void onLowMemory() { }
@Override
public void onConfigurationChanged(Configuration newConfig) {
setConfigChanged(true);
}
};
@Override
public void onCreate() {
registerActivityLifecycleCallbacks(activityCallback);
registerComponentCallbacks(componentCallback);
Log.v("Application startet", "Application startet");
super.onCreate();
}
@Override
public void onTerminate() {
unregisterActivityLifecycleCallbacks(activityCallback);
unregisterComponentCallbacks(componentCallback);
super.onTerminate();
}
}
, если вы когда-либо перезапустить вашу деятельность, вы можете позвонить:
((MyCustomApplication)getApplication).setconfigChanged(true);
Не забывайте, что сказать Android в используйте свое обычное приложение в манифесте:
<application
android:name="at.***.**********.util.MyCustomApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:hardwareAccelerated="true" >
Я уверен, что может быть лучший способ, но я еще не нашел его. Спасибо, много парней!
Спасибо за ваши ответы! Моя проблема не сводится к сохранению пароля. Это то, что я должен получить пользователя на левый экран, если он покинет приложение через домашнюю кнопку. Тем не менее, это не срабатывает. – blender
В этом случае вы можете записать в SharedPreferences, на экране которого вы сейчас показываете, например, некоторый код такого четного целого для каждой строки. Затем у вас есть собственный класс приложения, расширяющий приложение Android. Не забудьте зарегистрировать его в своем манифесте. В следующий раз, когда вы запустите свое приложение, оно будет первым в вашем приложении onCreate. Там вы можете прочитать код и запустить соответствующий экран. –
Привет, спасибо за ваш быстрый ответ. Я также попытался наследовать класс приложения, используя onCreate, чтобы определить начало приложения. Но на самом деле приложение не будет прекращено, если пользователь просто покинет приложение с помощью кнопки «домой» и вернется к нему. Вот почему сам жизненный цикл мне не помогает. – blender