【问题标题】:Are there one instance of ActivityManager for each activity in Android?Android 中的每个活动是否都有一个 ActivityManager 实例?
【发布时间】:2014-02-20 16:14:54
【问题描述】:

我向 ActivityManager 添加了一个静态字段并将其设置在我的活动中。当我退出我的活动并再次进入时,我发现该值已恢复为默认值。我想知道这是否意味着每个活动都有一个活动管理器实例?

基本上在 ActivityManager 中我添加了以下内容:

public static boolean s = false;
public void setS(boolean b) { s = b; }
public boolean getS() { return s; } 

然后我编译了操作系统并在我的应用程序中使用反射来访问上述方法。如果我不退出我的应用程序,那么 setS 方法中设置的任何内容都会反映在 getS 方法中。如果我退出应用程序并再次进入,那么 getS 总是返回 false。想知道为什么?

任何帮助表示赞赏!

【问题讨论】:

  • 因为你做了这个static 它不属于一个instance(在这个词的OO或Java含义中)而是属于一个process我>。鉴于您已经设法使用 JNI 访问它,它必须在您的应用程序自己的进程中,而不是在通过 IPC 与之交互的某个系统中。因此,这个变量的生命周期就是你的应用进程的生命周期。这几乎不会告诉您 ActivityManager 的正常工作方式。

标签: android operating-system


【解决方案1】:

ActivityManager 与系统中运行的整体活动交互。 将您的值保存到 SharedPreferences。您需要再次设置值 onstart() 和 onresume() 并将值保存到 onStop()、onDestroy() 中的 SharedPreferences

当您退出应用程序时,所有活动都被破坏,原因 getS() 函数返回 false,因为应用程序重新启动并且您的布尔值再次设置。

【讨论】:

  • 这似乎不是很针对所提出的问题,这似乎更多是关于通过实验修改来理解系统,而不是通过以可能更好地完成的方式存储有用的数据正常机制,例如 SharedPreferences。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多