1

我正在开发一个 Android 应用程序,该应用程序只能在具有两个屏幕的设备上运行(运行 API 29)。我有两个有点相关的问题:

1. 是否可以直接在副屏而不是主屏上启动应用程序?现在它在主显示器上启动,然后我可以使用ActivityOptions.

例如:

val exampleIntent = Intent(this, ExampleActivity::class.java)
exampleIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(
    exampleIntent, 
    ActivityOptions.makeBasic().setLaunchDisplayId(secondDisplayId).toBundle() 
)

2)是否可以在重新启动之前明确完成在第二个显示器上运行的活动?

我有一个用例,当满足某些条件时,我需要在第二个显示器(从主显示器)上重新启动一个活动。但是,如果该活动已在第二个屏幕上运行,则不会重新启动。

有没有办法在启动之前完成/关闭该活动?

4

1 回答 1

1

是否可以直接在第二个显示器而不是主显示器上启动应用程序?

这取决于进行发射的人。例如,如果启动器正在启动,启动器必须指示您的应用程序的入口点活动应该在辅助显示器上。

是否可以在重新启动之前明确完成在第二个显示器上运行的活动?

该活动可以调用finish()以完成自身。您需要通过一种或另一种方式告诉活动这样做,或者活动需要自己知道是时候完成了。例如,辅助显示活动可以对您在以下句子中引用的相同条件做出反应:

我有一个用例,当满足某些条件时,我需要在第二个显示器(从主显示器)上重新启动一个活动

老实说,这感觉就像是你自己强加的编码限制。从操作系统的角度来看,通过销毁和重新创建活动来获得什么并不清楚。

而且,这种行为可能看起来很糟糕,具体取决于您使用的是哪种双屏环境。例如,如果辅助显示器是电视、显示器或投影仪之类的设备,则 Android 的默认行为是将主显示器镜像到辅助显示器上。我希望您提出的行为会有很大的闪烁:

  • 你破坏了旧的次要活动
  • Android 开始在辅助显示屏上镜像主显示屏
  • 您开始替换次要活动

因此,我会竭尽全力避免不得不破坏并重新启动活动。例如,也许辅助显示器不应该显示一个活动,而是一个Presentation(它更像是一个Dialog)。或者,也许辅助活动可以简单地更新自己的 UI 以响应您引用的条件,而不必从头开始重建。

于 2021-10-22T22:14:10.847 回答