代码之家  ›  专栏  ›  技术社区  ›  Piyush Kukadiya

当应用程序移到后台时,Android是否清除视图中的数据?

  •  1
  • Piyush Kukadiya  · 技术社区  · 6 年前

    我的应用程序有以下安全要求:

    验证应用程序在回接时是否从视图中删除敏感数据。

    我的问题是, 安卓是否在后台从视图中删除数据?

    据我所知 android documentation 是:

    默认情况下,系统使用bundle实例状态保存活动布局中每个视图对象的信息(例如输入到editText小部件中的文本值)。

    一种解决方案是,我可以清除所有视图,然后使用下面的方法保存状态

    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
        // Save the user's current game state
    
        // Always call the superclass so it can save the view hierarchy state
        super.onSaveInstanceState(savedInstanceState);
    }  
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); // Always call the superclass first
    
        // Check whether we're recreating a previously destroyed instance
        if (savedInstanceState != null) {
            // Restore value of members from saved state
        } else {
            // Probably initialize members with default values for a new instance
        }
        // ...
    }
    

    但我不知道Android操作系统是否能清除视图中的数据,任何帮助都将不胜感激。

    谢谢

    3 回复  |  直到 6 年前
        1
  •  3
  •   shkschneider blazzerbg    6 年前

    安卓 一旦应用程序移到后台,就会自动回收视图。

    当需要释放RAM时,系统会终止进程;系统终止给定进程的可能性取决于进程当时的状态。

    它只是回收视图,如果它决定杀死它们或者如果它需要内存。或者在配置更改时。

    用户希望活动的UI状态在配置更改(如旋转或切换到多窗口模式)期间保持不变。但是,默认情况下,当发生这种配置更改时,系统会破坏活动,从而清除活动实例中存储的任何UI状态。

    总的来说,我认为你的方法是正确的。

    只是使用 onStop() (而不是) onPause() 因为有些对话和其他插入会将焦点从你的活动中移开),如果你想的话可以清除你的视图。

        2
  •  0
  •   max meijer    6 年前

    看看Android活动生命周期 https://developer.android.com/guide/components/activities/activity-lifecycle

    确保清除所有数据的一种方法是覆盖onpause功能并手动清除数据。当应用程序移到后台时调用OnPause。

        3
  •  0
  •   Pang Ajmal PraveeN    6 年前

    不,它不会删除数据,因为根据Android的生命周期,当您对视图进行后台处理时,会调用onpause()和onresume(),并且您的视图及其实例位于oncreate()方法中。

    因此,通过从后台启动视图,它不会删除视图的数据。