从启动屏幕重新启动应用程序,而不是恢复



>我有一个应用程序,基本上有一个项目列表和一个每个项目的详细信息屏幕。

最初启动时,我们显示项目列表。如果用户在查看详细信息屏幕时切换到另一个应用,则当他返回到该应用时,将显示详细信息屏幕。

所有这些都是标准,并且运行良好。但是,我的客户端需要用户在每次恢复应用时返回到列表屏幕而不是详细信息屏幕。

我的第一个想法是记住详细信息活动暂停的时间,并且在开始时,如果时间大于 X 秒,则完成并启动列表活动,而不是恢复。

有什么更可靠的方法可以做到这一点吗?

PS:我知道我们不应该这样做,我已经向我的客户解释过,决定不是我的。

使用共享首选项在 onPause 中保存暂停的详细信息活动的时间,当它恢复时,检查保存的时间与当前时间是否超过您的阈值,如果超过阈值,则关闭它,否则保持打开状态。

实施此解决方案,它肯定会有所帮助。

基本上,应用

实际上并没有完全重新启动,但是当启动器恢复应用时,您的启动活动正在启动并添加到活动堆栈的顶部。您可以通过在恢复应用程序并显示启动活动时单击后退按钮来确认是否是这种情况。然后,您应该会被带到恢复应用时希望显示的活动。

我选择实施以解决此问题的解决方法是检查Intent.CATEGORY_LAUNCHER类别,并在启动初始活动的意图中Intent.ACTION_MAIN操作。如果存在这两个标志并且活动不在任务的根目录下(意味着应用程序已经在运行),那么我在初始活动上调用 finish()。确切的解决方案可能不适合您,但类似的东西应该。

以下是我在初始/启动活动onCreate()所做的工作:

if (!isTaskRoot()
            && getIntent().hasCategory(Intent.CATEGORY_LAUNCHER)
            && getIntent().getAction() != null
            && getIntent().getAction().equals(Intent.ACTION_MAIN)) {
        finish();
        return;
    }

有关isTaskRoot()方法参考的更多详细信息。

您必须

为除list_item活动(初始活动)之外的所有活动类提供以下onPause()方法。

@Override
    protected void onPause() {
        super.onPause();
        Intent i = new Intent(getApplicationContext(), list_item_activity.class);
        startActivity(i);
    }

我可能错误地理解了你的问题,但你为什么要做所有的时间工作?我的意思是,假设您的列表和详细信息视图有片段,只需放置一个标志来监视您的活动已停止并收听以捕获您的活动恢复(通过 onResume 或 onWindowFocusChanged )。如果它已停止并恢复,则转换为列表片段(如果它尚不可见)。

你可以在这里做一个广播接收器。在活动OnResume方法上使用调用广播接收器并像这样执行您需要的任何操作。

@Override
protected void onResume() {
    super.onResume();
        sendBroadcast(new Intent("YourActionHere"));
}

最新更新