0

I'm working on my 1st Android app and wondering how to handle activation/deactivation/starting/stopping globally, not on Activity level.

This great article shows states transition for Activities: http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

Is there something similar for Application states?

For example at iOS and Windows Phone app there is clear app states separated from activities (views, controllers, whatever).

I'm asking because I want to perform certain operations only once per app loading/exiting not with every activity starting/stopping

4

3 回答 3

3

答案是根本没有直接的方法来做到这一点

而不是在应用程序类中,您可以捕获这些事件

@Override
public void onLowMemory()
{
    super.onLowMemory();
}

@Override
public void onTerminate()
{
    super.onTerminate();
}

所以你必须在你将要进行的所有活动中处理它

以下方法

  • onResume()
  • 开始()
  • onRestart()
  • 暂停()
  • onDestroy()

您必须在所有 Activity 中实现以处理所有应用程序

一个建议

您可以在应用程序类中有一些变量来保存应用程序状态

说创建一个变量

public static boolean isPaused;

并从状态变化的所有活动中设置它

于 2013-09-20T20:50:37.707 回答
2

您提出的问题适用于 iOS 和 Windows,但不适用于 Android。

尽管有一个 Application 类,但 Android 并没有真正将应用程序作为对象的概念。相反,应用程序是活动的松散集合。这种情况有很多充分的理由;例如,它支持快速的应用切换和不同应用的Activity之间的轻松交互。

协调您的“应用程序”以使一个 Activity 不会尝试执行已经完成的事情的最佳方法是使用 SharedPreferences 来存储应用程序状态。几乎所有其他方式都不太受欢迎。即使系统终止了您的整个应用程序,SharedPreferences 也会保持当前状态。Application 对象不会。

此外,Android 是基于暂停和恢复的。创建、暂停和恢复一个或多个活动。他们可能会被摧毁,但这是一个极端的例子。一个推论是应用程序不应该有退出按钮。不需要一个。我有时会看到有一个应用程序,但他们真正想做的是关闭后台服务或进程。做到这一点的最好方法是有一个显示“睡眠”或类似内容的可供性。

于 2013-09-20T23:10:35.400 回答
1

让所有活动从同一层次结构继承,并将您想要的任何内容放入 OnCreate、OnPause、OnResume、OnStop、OnDestroy 并在适用的情况下调用 super。

例子

家长

IamTheParentActivity : Activity

protected void onCreate()
{
setApplicationState(ApplicationState.Running);
}

protected void onPause()
{
setApplicationState(ApplicationState.Paused);
}

private void setApplicationState(Enum ApplicationState)
{
//Some Application Level Variable
Application.State = ApplicationState
}

孩子们

IamTheChild : IamTheParentActivity

protected void override onCreate()
{
base.OnCreate;
do other stuff
}
于 2013-09-20T22:35:21.930 回答