虽然 browser 已经可以支援多个分页浏览了(全在同一个 Activity
中做切换),但有些时候还是需要有另一个装载 WebView
的 Activity
。
举例来说,现在我可能用 browser 在播放 Youtube 影片;这时,如果我切换到别的分页想看其他内容时, Youtube 影片的分页会因为被移到背景而停止多媒体的播放,仅让目前前景的 WebView
是有作用的。
这麽做的原意是希望当开了很多分页时,背景的分页不会在背後偷偷作事,拖慢前景的载入。
那麽,要怎麽利用多 Activity
来达成上面的应用场景呢?目前 BrowserActivity
已经有支援在最上层的分页,在 App 进入背景後,能持续播放。在这个前提下,如果我能再长出一个一模一样的 BrowserActivity
instance,就能在新的 instance 中做其他的事情。
原以为只是单纯的新增一个按钮,让它在被点击时产生新的 BrowserActivity
instance 就好。但是,事情却没有想像中的这麽简单。 BrowserActivity
的 launchMode 设定是 singleInstance
。当初这麽设定是因为要让它只有一个 instance 可以接受其他 App 传来的开网页需求。因为 singleInstance
属性的关系,它在系统内永远只会存在一个实例,无法再建出第二个 BrowserActivity
来。
<activity
android:name="de.baumann.browser.activity.BrowserActivity"
android:configChanges="orientation|keyboard|keyboardHidden|screenSize|uiMode|screenLayout|smallestScreenSize"
android:label="@string/app_name"
android:launchMode="singleInstance"
android:theme="@style/AppTheme"
android:windowSoftInputMode="adjustResize|stateAlwaysHidden">
既然这条路行不通,只好另辟蹊径:建立另一个 Activity
,让它继承自 BrowserActivity
。首先,要将 BrowserActivity
class 改为 open:
open class BrowserActivity : AppCompatActivity(), BrowserController, OnClickListener { ... }
再来是建立 ExtraBrowserActivity
class
// in AndroidManifest.xml
<activity
android:name="de.baumann.browser.activity.ExtraBrowserActivity"
android:configChanges="orientation|keyboard|keyboardHidden|screenSize|uiMode|screenLayout|smallestScreenSize"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:windowSoftInputMode="adjustResize|stateAlwaysHidden"/>
// in source codes
class ExtraBrowserActivity : BrowserActivity()
当新建的按钮被点击时,必须 launch 这个新的 Activity
:
private fun launchNewBrowser() {
val intent = Intent(this, ExtraBrowserActivity::class.java).apply {
addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT)
addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK)
action = ACTION_VIEW
data = Uri.parse(config.favoriteUrl)
}
startActivity(intent)
}
因为希望这个新建立的 Activity
也可以出现在 Recent Apps 列表中,所以 intent
必须要加入设定 Intent.FLAG_ACTIVITY_NEW_DOCUMENT
。
这样子就完成啦。下面我们来看一下完成後的操作。
<<: 【在 iOS 开发路上的大小事-Day13】Firebase 你好啊!
>>: 2021-Day20. Serverless(八):Google Container Registry - Intro
当我们布署完Microsoft Defender for Endpoint 接下来当侦测到威胁时,系...
说明 本篇将继续介绍使用django-social-auth设定整合Activate Directo...
【前言】 这篇文章要来分析我负责的整个项目,并且准备所有我需要的东西! 【(使用者看见的)前端与(...
前言 这篇还是要继续来介绍jconsole,Thread的页签介绍 Step.1 首先准备一个Jco...
tags: ItIron2021 Javascript 前言 昨天我们快速带过闭包的概念,俗话说打铁...