【问题标题】:android - static var is killed but activity is brought to foregroundandroid - 静态变量被杀死,但活动被带到前台
【发布时间】:2023-04-11 00:11:01
【问题描述】:

假设我有 2 个活动 A 和 B。我从 A 转到 B,然后点击 Home 按钮。在 A 中初始化了一些静态变量。

几个小时或几天后,或者直到活动被终止,我从“最近”按钮再次启动该应用程序。活动 B 成为此应用程序的新入口点,但静态变量不再持有任何值,除非我重定向回 A,否则没有机会被初始化。

我的launchMode 为这两个活动是singleTop。不确定这是否重要,但我尝试过singleTopsingleInstancestandard,它们都不起作用。我想我的预期行为将是入口点始终是 A 或任何其他活动,如果没有被杀死,当然静态变量仍然持有价值。

谢谢!

【问题讨论】:

    标签: android android-activity activity-state


    【解决方案1】:

    问题可能是因为当您的应用程序处于后台时,android 操作系统必须清理内存以释放其他应用程序的资源

    【讨论】:

    • 你确定,Android系统在需要内存的时候会清空静态值吗?如果清空了,静态的概念有什么用?
    • 我知道活动可能会被杀死。我正在寻找解决方案。如果应用程序被杀死,你知道是否有办法总是从活动 A 开始?
    【解决方案2】:
    • 我希望那些static 变量是原始数据类型。
    • 即使应用程序在后台,Android 系统也会在一段时间后终止进程。
    • 因此您可以将这些原始变量通过Intent 传递给ActivityB
    • 现在,如果应用程序从后台被杀死并将其带到前台,则使用相同的意图来启动 ActivityB,您仍然可以获得传递的变量。

    将变量传递给ActivityB,而不是静态变量。

    Intent intent = new Intent();
    intent.putExtras("Id", 1);
    intent.putExtras("Name", "kevz");
    startActivity(intent, ActivityB.class);
    

    现在在ActivityB 获取传递的变量值-

    int Id = getIntent().getIntExtra("Id", -1); // -1 is default value.
    String Name = getIntent().getStringExtra("Name", "unknown"); // unknown is default value
    

    【讨论】:

    • 不,那些静态变量并不都是原始类型。如果我必须通过意图将变量传递给活动 B,那么使用静态的意义何在?而且如果我有更多的活动,我必须一直通过它们吗?如果应用程序被杀死,我想我更愿意启动活动 A。知道怎么做吗?
    【解决方案3】:

    如果静态变量不起作用,您可以尝试对变量使用getter()setter() 方法。

    【讨论】:

      猜你喜欢
      • 2013-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      • 1970-01-01
      相关资源
      最近更新 更多