【问题标题】:android activity lifecycle for a password query密码查询的android活动生命周期
【发布时间】:2013-07-02 15:56:54
【问题描述】:

我真的希望,有人能指出我正确的方向。我目前正在开发一个用于医疗目的的应用程序。为了保护他们的个人数据,用户将获得创建密码的能力。如果没有该密码,至少应该无法访问整个应用程序。 我在我的活动的直接子类中实现了一个简单的输入对话框(它被所有其他活动继承)。

但如果应用启动另一个活动,生命周期也会触发密码对话框。即使用户只是保存了他的数据。

我如何识别用户来自应用程序外部?我尝试了很多,如果它只是启动另一个活动或被发送到后台并且用户回来(这应该触发对话框),似乎生命周期保持不变。

提前致谢

【问题讨论】:

    标签: android android-activity passwords lifecycle onresume


    【解决方案1】:

    您可以使用SharedPreferences 写一个标志,表明您已登录。 然后,您可以在主要活动的 onDestroy 或您从应用注销的任何位置清除该标志。

    【讨论】:

    • 感谢您的回答!我的问题不在于保存密码。如果他通过主页按钮离开应用程序,我必须让用户进入左侧屏幕。但这不会触发 onDestroy。
    • 在这种情况下,您可以在 SharedPreferences 中记下您当前正在显示的屏幕,例如通过一些代码,例如每个字符串的不同整数。然后有你自己的应用程序类扩展 android 应用程序。不要忘记在您的清单中注册它。下次启动应用程序时,它会首先出现在应用程序的 onCreate 中。在那里您可以阅读代码并启动相应的屏幕。
    • 您好,感谢您的快速回复。我也尝试继承应用程序类,使用 onCreate 来识别应用程序的启动。但实际上,如果用户只是用主页按钮离开应用程序并返回它,应用程序不会被终止。这就是为什么生命周期本身对我没有帮助的原因。
    【解决方案2】:

    好的...我终于找到了解决这个问题的方法。最后,继承应用程序是正确的选择。 我正在保存最后一个暂停的活动,如果同一活动随时恢复,我会显示对话框。我还必须处理配置更改,这会导致活动重新启动。 如果有人遇到和我一样的问题,代码如下:

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

    我确信可能有更好的方法,但我还没有找到。 非常感谢大家!

    【讨论】:

      猜你喜欢
      • 2013-01-13
      • 2011-12-18
      • 1970-01-01
      • 2014-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多