处理应用程序状态(启动/停止)而非活动状态

时间:2013-09-20 20:46:28

标签: android activity-lifecycle application-lifecycle

我正在开发我的第一款Android应用,想知道如何全局处理激活/停用/启动/停止,而不是在活动级别。

这篇精彩的文章显示了活动的状态转换: http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

应用程序状态是否有类似内容?

例如,在iOS和Windows Phone应用程序中,有明确的应用程序状态与活动(视图,控制器等)分开。

我问,因为我想每个应用程序加载/退出时只执行一次某些操作而不是每个活动开始/停止

3 个答案:

答案 0 :(得分:3)

答案是 Simply No Direct方法来执行此操作

而不是在Application Class中,您可以捕获这些事件

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

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

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

以下方法

  • 的onResume()
  • 在onStart()
  • onRestart()
  • 的onPause()
  • 的onDestroy()

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

A suggesstion

您可以在Application类中使用一些Variable来保存应用程序状态

说创建一个像

这样的变量
public static boolean isPaused;

并将其设置为状态更改中的所有活动

答案 1 :(得分:2)

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

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

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

此外,Android基于暂停和恢复。创建,暂停和恢复一个或多个活动。他们可能会被摧毁,但这是一个极端的情况。这样做的必然结果是应用程序不应该有退出按钮;没有必要。我有时看到有一个应用程序,但他们真正想要做的是关闭后台服务或进程。最好的方法是使用“睡眠”或类似的可供性。

答案 2 :(得分: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
}