gpt4 book ai didi

android - 对 Activity 的弱引用 (Android)

转载 作者:行者123 更新时间:2023-11-29 16:25:54 25 4
gpt4 key购买 nike

在我的 Android 应用中,当用户尝试从一个 Activity 转换到另一个 Activity 时,可能会有一些全局状态表明他们需要先完成一些其他操作。

为此,我编写了一个包含以下代码的类:

private static WeakReference<Activity> oldActivityReference;
private static Intent waitingIntent;

public static void pushActivity(Activity currentActivity, Intent newActivityIntent) {
Intent blockingIntent = ThisClass.getBlockingActivity();
if (blockingIntent != null) {
ThisClass.oldActivityReference = new WeakReference<Activity>(currentActivity);
ThisClass.waitingIntent = newActivityIntent;
currentActivity.startActivity(blockingIntent);
return;
}
currentActivity.startActivity(newActivityIntent);
}

当阻塞 Activity 完成时,它调用 ThisClass.blockingActivityFinished()。这将检查对旧 Activity 的弱引用是否仍然存在,如果存在,则从该 Activity 启动原始 Intent 。如果没有,它将从我的应用程序的上下文中启动原始 Intent 。

我的问题是,
这听起来理智吗?这种技术是否存在任何潜在的内存泄漏问题?有没有更好的方法来实现这一目标?

编辑 -明确地说,可能触发中断的事件类型是 1) 表明当前应用程序版本已弃用的服务器 ping 2) 表明用户凭据不再有效的任何服务器 RPC。我不想向每个 Activity 添加逻辑来处理这些 Activity 的检查,并在它们完成后照常恢复业务。这违反了 DRY,并且在团队环境中容易出错。

最佳答案

Does this sound sane?

我永远不会使用这种技术。可变静态数据成员很危险,WeakReference虽然。特别是,如果用户做了不可想象的事情,比如将他们的电话用作电话,或者以其他方式长时间离开您的应用程序流程,我希望这会失败。您的 Activity 可能会被销毁并且您的进程会终止以释放 RAM,但 Activity 将保留在任务中并可能会被重新激活。那时,你的状态很糟糕,因为静力学被破坏了。

Are there any potential memory leak issues with this technique?

你泄露了一个 Intent .

Is there a better way to accomplish this?

为了这个答案的其余部分,我将把您的起点称为 Activity A,将“其他操作”称为 Activity B,并将所需的结束称为 Activity C。因此,在您的代码中, newActivityIntent用于 Activity C,blockingIntent用于 Activity B,currentActivity是 Activity A。

选项 #1:将决策过程放在 Activity C 中,而不是 Activity A。让 Activity C 检查 onCreate() 中的条件并立即调用 startActivity()如果条件要求显示 Activity B,则为 Activity B。

选项 #2:将决策过程留在 Activity A 中,但在 true 中传递 bool 值(例如,Intent 表示“我们必须展示 Activity B”) startActivity() 的额外费用调用 Activity C。 Activity C 检查 onCreate() 中的 bool 值并立即调用 startActivity()对于 Activity B,如果 bool 值是这样的话。

在这些选项中,您可以避免静态。

关于android - 对 Activity 的弱引用 (Android),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3687272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com