2

我需要帮助来确定正确的方法。每次整个应用程序中断或终止/销毁时,我都想将内部数据库备份到外部存储中的某个位置。我想从一个名为 Main 的中心类调用此方法,该类扩展了 Application。这样做的原因是,我需要使用几个活动,并且我只想在需要时调用备份方法(就像整个应用程序被另一个应用程序破坏或中断时所描述的那样)。我尽量避免在他们的 onPause() 方法中的每个活动中调用此备份方法。

我想过在应用程序的 onCreate() 方法中启动一个服务,并在服务被破坏时启动备份方法。但这在中断的情况下无济于事,据我了解服务背后的逻辑。而且服务似乎没有启动。startService(new Intent(getApplicationContext(), BackupService.class));此外,我认为仅使用服务的 onDestroy() 方法不是一个好方法,我认为这不是服务类的用途。

所以总结我的问题,你知道比使用服务更好的方法吗,或者如果不知道我应该如何使用该服务才能仅在整个应用程序(而不仅仅是一个活动)时调用备份被中断或破坏。

4

3 回答 3

1

我使用这种方法在我的一个游戏中播放背景音乐,但我想它也适用于这种情况。

使用布尔标志来指示您的应用程序是否正在启动应用程序的另一部分。

boolean movingInApp = false;
....
movingInApp = true;
Intent intent...
.....
public void onPause() {
    if(!movingInApp) {
        //start service
    }
}

public void onResume() {
    movingInApp = false;
    //Stop service
}

通过在启动任何意图等之前将值设置为movingInApptrue您可以阻止您的应用程序启动服务。请记住稍后在您的onResume()方法中再次将其设置为 false。如果系统让您的应用程序进入后台,这将是错误的,并且您的服务将被启动。

于 2012-10-11T17:26:19.540 回答
1

首先,如果您的服务“似乎没有启动”,那么您可能做错了什么。

为了实现您的目标,每次整个应用程序中断或终止/销毁时,将内部数据库备份到外部存储中的某个位置:

这里一般分为三种情况。

如果你想在活动层这样做:

  1. 要知道您的应用程序何时崩溃,您需要实现一个自定义处理程序来捕获未捕获的异常。

  2. 要知道您的活动何时“中断”,唯一的方法是在 onPause 中进行。

  3. 要知道您的活动何时“终止”,唯一的方法是在 onDestroy 中进行。

这将要求您有一个清晰的导航,并且只在您的“主要活动”中进行,所有其他活动开始并返回到它,或者使用一个标志来指示暂停是否是由转到另一个活动引起的。

如果您想在服务层执行此操作:(您执行 onDestroy 的方式不允许您检测中断的情况,因为您必须启动服务粘性以保持其运行)

您必须在每个活动 onBind 上设置一个标志(您必须绑定它并取消绑定它)以了解它是否是崩溃/中断/终止,这将使您的代码的其他部分复杂化。

为避免运行重复代码,您必须创建一个通用基类并从中扩展您的其他活动。

于 2012-10-11T17:43:34.060 回答
0

为什么你不让你所有的活动都扩展一个基础活动,而基础活动又扩展了android活动类我基础活动在onPause中有backupDB方法因此你不必把它放在每个活动暂停方法中

于 2012-10-11T17:59:14.723 回答