猿问

将我的应用程序置于 Android 后台后如何恢复以前的应用程序

当当前任务(我的应用程序)使用后退或概览按钮置于后台时,我需要一种方法来恢复以前的 Android 任务。例如,当收到 SIP 呼叫时,youtube 应用程序播放视频。软件电话任务被置于前台,然后呼叫被应答。通话结束后,按返回或概览按钮会显示 youtube 应用程序并继续播放视频。此类 Android 应用程序的一个示例是 Linphone。我想知道如何以编程方式实现这一点。


慕森卡
浏览 332回答 3
3回答

红糖糍粑

正如其他人和此处所述,Android 会自动为您处理。但是,如果你需要明确地添加任何东西去/来/从后台状态,那么你也可以重写时onSaveInstanceState()和onRestoreInstanceState()将被相应地调用方法。当您的 Activity 开始停止时,系统会调用该onSaveInstanceState()方法,以便您的 Activity 可以将状态信息保存到实例状态包中。此方法的默认实现保存有关 Activity 视图层次结构状态的瞬态信息,例如EditText小部件中的文本或小部件的滚动位置ListView。要为您的 Activity 保存其他实例状态信息,您必须覆盖onSaveInstanceState()并将键值对添加到在Bundle您的 Activity 意外销毁时保存的 对象。如果您覆盖onSaveInstanceState(),并且您希望默认实现保存视图层次结构的状态,则必须调用超类实现。@Overrideprotected void onRestoreInstanceState(Bundle outState) {    if (outState != null) {       Crashlytics.log(1, "FormActivity", "Method:onRestoreInstanceState, Msg: saved instance is not null");        if (outState.containsKey("record")                && Session.getCurrentRecord() == null) {            Session.setCurrentRecord(                    gson.fromJson(                            outState.getString("record"),                            Record.class                    )            );        }        if (outState.containsKey("user")                && Session.getCurrentUser() == null) {            Session.setCurrentUser(                    gson.fromJson(                            outState.getString("user"),                            User.class                    )            );        }    }    super.onRestoreInstanceState(outState);}@Overrideprotected void onSaveInstanceState(Bundle outState) {    Session.setCurrentRecord(record);    outState.putString("record", gson.toJson(Session.getCurrentRecord()));    outState.putString("user", gson.toJson(Session.getCurrentUser()));    super.onSaveInstanceState(outState);}

繁花如伊

这是由android系统自动完成的。现在为什么您可能无法注意到您的应用程序的这种行为。您可能正在从应用启动器启动您的应用。这意味着您已经将所有其他应用程序(启动器除外)置于后台。现在,根据启动器设置,当您按下后退按钮时,您可能会从启动应用程序的位置进入页面或主页。你什么时候可以观察到这种行为如果您的活动是从后台服务启动的,例如广播接收器如果您的活动是通过单击通知按钮启动的基本上,当您的活动创建时没有杀死或将其他应用程序置于后台,当您的应用程序关闭时,您将返回到同一个应用程序。例外 - 如果您使用主页按钮,所有应用程序都会转到后台并显示主屏幕。希望这可以帮助。

动漫人物

这是关于如何保留 UI 状态的官方文档:https://developer.android.com/topic/libraries/architecture/saving-states如果用户将手机配置为始终在后台终止活动或者他们的资源有限,那么您必须处理它,但在某些情况下(您的活动没有被终止并保留在内存中),因为 Mayank 回答系统会为您完成.从电话应用程序接听电话将中断您的应用程序(系统启动的 UI 状态解除)您应该按照上述文档的建议执行的操作:在部分:管理 UI 状态:分而治之本地持久性:存储您在打开和关闭活动时不想丢失的所有数据。示例:歌曲对象的集合,其中可能包括音频文件和元数据。ViewModel:将显示关联的 UI 控制器所需的所有数据存储在内存中。示例:最近搜索和最近搜索查询的歌曲对象。onSaveInstanceState():如果系统停止然后重新创建 UI 控制器,则存储轻松重新加载活动状态所需的少量数据。不是在此处存储复杂对象,而是将复杂对象持久保存在本地存储中,并将这些对象的唯一 ID 存储在 onSaveInstanceState() 中。示例:存储最近的搜索查询。因此,在您的情况下,有一个视图模型可以存储收到呼叫时的 URL 和视频时间我还会使用正确的生命周期钩子在 instanceState 中存储相同的信息这是一个很好的 SO 线程,其中包含有关如何使用 savedInstanceState 的示例: Saving Android Activity state using Save Instance State它有新旧答案,您可能需要通读一遍以了解事情如何随着时间的推移而发生变化基本上上面三个要点是官方文档推荐的策略
随时随地看视频慕课网APP

相关分类

Java
我要回答