0

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

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

    @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 秒,对我来说太多了。如果用户在那几秒钟之间单击主页中的设置图标,则应用程序不会再次启动。我不知道为什么,经过大量谷歌搜索后,我在这里写信:)请帮助我!

4

3 回答 3

1

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

Android 聆听主页按钮

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

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

于 2012-10-17T23:57:22.413 回答
1

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

Android SDK 文档明确指出“应用程序通常不应设置此标志;持久模式仅适用于某些系统应用程序。” 您还会消耗大量电池。Android 并不是专门为应用程序在不使用时保持运行而设计的,以便操作系统可以正确执行多任务并保持合理的电池使用量。服务可以设置为在前台运行Service.startForeground()

值得一提的是,移动设备上的用户比台式机上的用户更能容忍延迟,所以它可能没有你最初想象的那么糟糕。

于 2012-10-17T23:20:12.690 回答
0

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

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

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

您正在尝试 - 糟糕 - 做的是强迫用户永远不要离开您的应用程序。你是说你比你的用户更重要。您的用户可能会不同意您的态度。

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

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

于 2012-10-17T23:44:15.983 回答