【问题标题】:Android - Resume application from background programmaticallyAndroid - 以编程方式从后台恢复应用程序
【发布时间】:2012-10-17 22:50:33
【问题描述】:

我需要在应用程序进入后台后立即恢复我的应用程序。

我不喜欢我的解决方案,因为有一些错误并且性能不太好,这是我尝试的:

    @Override
protected void onPause() {
       super.onPause();
       Intent intent = new Intent(this, MainActivity.class);
       intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
       intent.setAction(Intent.ACTION_MAIN);
       startActivity(intent);
}

这是一个单一的 Activity 应用程序,它加载一个包含许多动态和 flash 内容的 webview,同时每隔几秒更新一次状态,每隔几秒从网络获取信息。 因此,每次在后台重新创建活动时都不是简单快速。 重新启动应用程序需要大约 3-4 秒,对我来说太多了。如果用户在那几秒钟之间单击主页中的设置图标,则应用程序不会再次启动。我不知道为什么,经过大量的谷歌搜索后,我在这里写:)请帮助我!

【问题讨论】:

  • 所以每当用户在前台有其他东西而不是你的活动时,你想再次启动你的活动吗?听起来它不适合 Android 框架。请看看这个Android Developer page。您可能想要使用Service。请查收。
  • 这是一个可怕的想法。请改用后台服务。
  • 如何使用服务来做我需要的事情?

标签: android performance background onpause


【解决方案1】:

您可以尝试在您的 Android 清单中的 <application> 元素中设置 android:persistent="true",但我的印象是,如果您的应用程序未作为默认系统映像的一部分安装,Android 操作系统将忽略该请求。

Android SDK 文档明确指出“应用程序通常不应设置此标志;持久模式仅适用于某些系统应用程序。”您还会消耗大量电池。 Android 并不是专门为应用程序在不使用时保持运行而设计的,以便操作系统可以正确执行多任务并保持合理的电池使用量。可以将服务设置为在前台运行 (Service.startForeground()),但操作系统要求它们在通知区域提供小部件,以便用户知道服务始终处于开启状态。

不管怎样,移动设备用户比桌面用户更能容忍延迟,所以它可能没有你最初想象的那么糟糕。

【讨论】:

    【解决方案2】:

    我认为您想要的是实现主屏幕更换。基本上,您添加了一个意图过滤器,您的应用程序会在用户按下主页键时响应广播的意图。你可以在这里阅读更多。

    Android Listen Home button

    请注意,如果您这样做,您的用户至少会得到一个选择器,询问他们是运行您的应用还是标准主屏幕应用。用户可以根据需要选择将您的应用设为默认主屏幕应用。

    话虽如此,除非您有非常特殊的情况,例如您正在构建专用于您的应用程序的软件/硬件组合设备,否则您几乎肯定不想这样做。 CommonsWare 所说的在这方面是正确的。如果您尝试接管设备,您肯定会收到卸载奖励,或者来自不太精通技术的用户的愤怒电子邮件,您碰巧诱使您的应用成为默认主屏幕。

    【讨论】:

      【解决方案3】:

      所以每次在后台重新创建活动时都不是简单快速

      当用户按下 HOME 时,您的进程会停留一段时间。如果用户在几分钟(或者甚至几小时)内返回,您的进程仍然存在,并且用户将返回到您的活动。

      但是,如果用户离开了很长一段时间,或者用户在他们的设备上做了很多事情(例如,运行了一堆应用程序),Android 将终止您的进程以释放内存用于其他事情正在进行。 “相当长的时间”究竟有多长,或者“他们的设备有多少”,将取决于多种因素,例如他们运行的其他应用程序、他们的设备中有多少 RAM、什么每个应用的堆大小(与 Android 操作系统版本和屏幕大小相关)等等。

      您正在尝试(很糟糕)的做法是强制用户永远不要离开您的应用。你是说你比你的用户更重要。您的用户可能会不同意您的态度。

      您可以通过精简您的应用程序来帮助您的事业,从而减少它占用的内存。做到这一点并长期帮助自己的一种方法是摆脱“闪存内容”。到明年这个时候,您的大多数用户很有可能无法运行您的应用程序,因为 Flash 不再适用于 Jelly Bean 及更高版本。启动 Flash 插件也会减慢 Activity 的启动时间。

      除此之外,对于 WebView 之外的任何应用程序逻辑,您都可以使用 Traceview 来尝试找出您的时间花在哪里,以尝试提高性能。

      【讨论】:

      • 我正在为我镇上一些商业活动中使用的一小部分平板电脑开发这个应用程序。平板电脑和我的应用充当“广告”:)
      猜你喜欢
      • 2016-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      相关资源
      最近更新 更多