精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

使用 Router 實現的模塊化,如何優雅的回到主頁面

開發 開發工具
一般而言,這種 Router 的方案,從外部直接調起的方式,是由一個 ProxyActivity 做一個代理,然后再由它去跳轉到項目內的其他目標 TargetActivity 。這樣的實現,理論上,是可以從外部調起 App 內所有的 Activity 的。

 [[198664]]

一、前言

現在越來越多的 App 以 Router 路由的形式,來實現模塊化。一般而言,這種 Router 的方案,從外部直接調起的方式,是由一個 ProxyActivity 做一個代理,然后再由它去跳轉到項目內的其他目標 TargetActivity 。這樣的實現,理論上,是可以從外部調起 App 內所有的 Activity 的。

但是這樣就面臨一個問題,如果從外部調起了一個子頁的 Activity,舉例是一個影片詳情頁,如果想在用戶回退的時候,進入到應用主頁,而非直接退出了。就需要特殊處理了。

本文就以如何優化的回退到我們需要的 Activity 來做一個說明。

二、分析和拆解問題

對于前面舉例的情況來說,實際上我們只需要處理好以下問題即可。

  1. 如何區分當前 Activity 是從應用內打開,還是從應用外直接打開,就是打開 Activity 的來源。
  2. 在區分出來 Activity 打開的來源之后,如何優雅的退回到我們需要的 Activity。
  3. 要處理一些特殊情況。

對于這樣幾個問題,區分來源,最粗暴的方式,就是在 Intent 里增加一個類似 from 的字段,來標記是從那個頁面過來的,如果不是我們指定的話,在 finish() 或者 onBackPressed() 的時候,就打開 MainActivity 即可。

這是一個粗暴的方式,雖然它有用,可它不夠優雅。

而在 Support v4 22.0.0 開始,針對這樣的情況,為我們增加了一個 NavUtils 的類,專門用于處理這種情況,接下來就來看看如何使用它。

三、NavUtils 如何使用

NavUtils 從名稱上就可以看出來,它是一個用于處理導航的輔助工具類。

先來看看它的方法,它主要的方法主要分三中:

  • getParentActivityIntent():獲得一個用戶回退到父Activity 的Intent。
  • shouldUpRecreateTask():是否需要重新構建一個 Task。
  • navigateUpTo():回退到 Intent 指定的父 Activity。

為了方便使用 getParentActivityIntent() 提供了很多的重載,但是實際上目的都是一樣的,就是拿到我們指定的當前 Activity 的上一級 Activity(父 Activity )。

既然是 Support v4 包下的輔助類,它其實在內部也是做好了很多兼容的處理。它針對不同的 Android Level 做了不同的實現,可以看到 NavUtilsImplBase 和 NavUtilsImplJB 都是為了處理兼容性的問題,他們都實現了 NavUtilsImpl 接口,而且在靜態代碼塊內處理好了兼容性問題。

好了,源碼就先聊到這里,先來看看如何使用。

如果想要使用 NavUtils 還需要在 AndroidManifest.xml 中,為 Activity 指定一個父的 Activity。

這里有個 Demo ,有兩個 Activity,分別是 MainActivity 和 ChildActivity 。我們需要對 ChildActivity 設定父 Activity。

為 Activity 設定父 Activity,是需要區分版本的,在 4.1 之后,是可以使用 android:parentActivityName 直接指定即可。而對于 4.0 及一下的版本,如果想要使用,可以配置 meta-data 標簽,name 必須是 android.support.PARENT_ACTIVITY 而 value 就是用來指定父 Activity 的。

先來看看官方推薦的使用示例。

它的流程非常的簡單,首先使用 NavUtils.getParentActivityIntent() 方法,獲得它的父 Activity,然后使用 NavUtils.shouldUpRecreateTask() 方法,確定當前 Activity 是否需要一個 Task ,如果需要,使用 TaskStackBuilder 來操作,如果不需要就直接調用 NavUtils.navigateUpTo() 方法來繼續接下去的邏輯。

可以看到這一套邏輯,非常的簡單,如果按照文檔的描述,使用起來應該體驗挺不錯的,但是它有坑,后面講。

三、NavUtils 的源碼

先來看看 NavUtilsImplBase 這個 Api Level 16 以下的 Api 實現,它因為沒有一些高版本的 Api,從源碼上能看出跟多細節。

簡單關注一下它的細節,shouldUpRecreateTask() 方法,實際上是通過校驗 Action 是否等于ACTION_MAIN 來確定的,而 navigateUpTo() 只是為 upIntent 添加了FLAG_ACTIVITY_CLEAR_TOP 這個 flag ,然后啟動父 Activity 并且關閉自己。而 getParentActivityIntent() 的代碼,其實核心還是在 NavUtils.getParentActivityName(),最終可以看到,它和我們配置的一樣,是從 meta-data 中獲取的數據。

再來看看 NavTilsImplJB 這個 Api Level 16 上的實現。

可以看到,它其實很多邏輯都放在 NavUtilsJB 這個類中。

而它實際上很多方法都是直接調用的 Activity 中對應的方法,有興趣可以去看看 Activity 的源碼中的實現。

四、填坑和最終實現

到這里,基本上就已經了解了 NavUtils 的實現原理了,看樣子用起來應該沒那么多問題,但是如果實際使用起來,你就會發現有坑了。

1、shouldUpRecreateTask() 永遠返回的是 false。

實際上,這并不是 shouldUpRecreateTask() 方法在實現上有什么 Bug,它實際上是給Notification 使用的,在 Notification 使用 PendingIntent 的時候,使用 TaskStackBuilder來構建它,其構造一個 Back Task ,在這里就可以使用 shouldUpRecreateTask() 方法來做判斷了。

但是大多數情況下,我們并不只是在 Notification 中使用它,并且有一些推送的消息,這個Notification 并非我們去構造的,而是由第三方 SDK 來構建的,這就導致這種情況并不符合大多數場景。

下面是官方提供的一個 Demo。

有興趣可以移步到官方文檔查看:

https://developer.android.com/guide/topics/ui/notifiers/notifications.html#NotificationResponse

所以我們可以使用 Activity.isTaskRoot() 來做輔助判斷,它是 Activity 的方法,可以判斷當前 Activity 是否是在當前 Task 的根 Activity,這樣就說明再回退的話,實際上就會將當前 Task 完整的清空,表現就是退出去了。

2、navigateUpTo() 會重新啟動MainActivity

navigateUpTo() 方法從源碼上可以看出來,它實際上是強加了一個FLAG_ACTIVITY_CLEAR_TOP ,然后重新啟動它,這樣的話,在某些設備上,默認是有動畫處理的,因為這里是打開了一個新的頁面,而非 finish() 之后,自動回退到上一個頁面的操作。

那么解決方案也非常的簡單,在判斷當前 Activity 不需要使用 TaskStackBuilder 構造一個 Task Stack ,就直接 finish() 掉當前的頁面,因為這樣的判斷說明當前 Activity 是在頁面內正常打開的,所以直接 finish() 就可以退回到上一個頁面了。

最終改動之后的實現效果就變成了這樣,AndroidManifest.xml 中的配置不變。

【本文為51CTO專欄作者“張旸”的原創稿件,轉載請通過微信公眾號聯系作者獲取授權】 

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2022-09-21 11:51:26

模塊化應用

2019-01-30 14:04:57

Fedora存儲庫

2010-01-20 09:14:49

C語言模塊化

2020-09-17 10:30:21

前端模塊化組件

2020-09-18 09:02:32

前端模塊化

2021-12-16 22:02:28

webpack原理模塊化

2010-01-21 09:27:30

模塊化的優點NetBeans

2019-09-02 10:51:59

Python腳本語言程序員

2022-09-05 09:01:13

前端模塊化

2016-10-09 11:03:41

Javascript模塊化Web

2019-08-28 16:18:39

JavaScriptJS前端

2021-11-19 10:55:03

GitOps運維自動化

2024-01-17 10:16:22

前端國際化消息鍵

2023-01-31 10:29:26

JavaScript國際化國際化庫

2009-12-03 20:15:13

模塊化路由器

2010-05-28 10:31:28

模塊化IT

2021-07-14 09:26:51

UPS電源模塊化

2023-05-24 10:35:11

Node.jsES模塊

2019-12-02 16:05:10

前端模塊化JavaScript

2011-05-13 15:54:50

C模塊化
點贊
收藏

51CTO技術棧公眾號

宇都宫紫苑在线播放| 视频一区国产视频| 国产成人av电影| 亚洲欧美国产va在线影院| 成人中文字幕+乱码+中文字幕| 精品伦一区二区三区| 自拍视频在线网| 久久av超碰| 亚洲一区二区三区四区在线观看| 国产精品久久久久久搜索| 精品人妻一区二区三区日产| 在线你懂的视频| 国产一区二区网址| 伊人伊成久久人综合网小说| 2022亚洲天堂| 天堂在线视频免费| 亚洲高清在线| 欧美伊人久久大香线蕉综合69| 国产有色视频色综合| 国产一级淫片免费| av不卡一区二区| 一区二区三区精品视频在线| 成人精品久久一区二区三区| 日本不卡一二区| 国产视频网站一区二区三区| 亚洲免费看黄网站| 99re在线国产| 国产女人被狂躁到高潮小说| 国产第一精品| 久久久九九九九| 韩日欧美一区二区| 国产 porn| 深夜视频在线免费| 国产精品久久天天影视| 在线一区二区观看| 国产成人免费观看| 国产精品美女毛片真酒店| 成人资源在线| 欧美一区二区视频在线观看2020| www.99riav| 欧美熟妇乱码在线一区| 国产精品入口66mio| 亚洲免费av电影| www.黄色网| 原纱央莉成人av片| 国产精品免费久久| 97se视频在线观看| 国产成人无码精品| 精品午夜久久| 日韩精品中文字幕在线不卡尤物| 真人抽搐一进一出视频| 成人精品在线播放| 乱码第一页成人| 久久精品国产99国产精品澳门| 久久久久久久久久久久国产精品| 91麻豆精品| 午夜av电影一区| 亚洲精品乱码久久久久久蜜桃91| 国产日韩欧美视频在线观看| 尤物精品在线| 久久久久久com| 丰满的亚洲女人毛茸茸| 亚洲福利合集| 日本电影亚洲天堂一区| 日本一本草久p| 欧美成人片在线| 国产成人午夜电影网| 热99久久精品| 国内偷拍精品视频| 欧美黄色一区| 亚洲无限av看| av免费观看不卡| 日韩av懂色| 欧美色欧美亚洲高清在线视频| 亚洲图片都市激情| 天堂中文在线资| 久久精品免费在线观看| 国产精品久久久久久久久久久久午夜片 | 一区二区小视频| 亚洲区综合中文字幕日日| 精品一区二区三区四区| 日本女人黄色片| 成人精品动漫一区二区三区| 亚洲精品99久久久久| 色91精品久久久久久久久| 18video性欧美19sex高清| 国产精品久久久久久久久免费丝袜| 国产精品一区而去| 欧美美女搞黄| 亚洲欧美日韩一区二区三区在线观看 | 亚洲天堂成人在线视频| 亚洲自拍第三页| av在线不卡精品| 欧美日韩免费区域视频在线观看| 中文字幕乱码免费| 日韩欧美一中文字暮专区| 亚洲日本一区二区| 久久久久久久久久久99| 国产白丝在线观看| 亚洲精品免费一二三区| 午夜欧美性电影| 激情小视频在线| 久久夜色精品国产噜噜av| 国产精品免费一区二区三区| 男女污污视频在线观看| 亚洲人成亚洲人成在线观看图片 | 都市激情国产精品| 亚洲最新在线观看| 日韩精品一区二区三区不卡| 亚洲性色av| 精品国产鲁一鲁一区二区张丽 | 免费a级毛片在线播放| 国产亚洲一区二区三区在线观看 | 91精品国产综合久久久蜜臀粉嫩| 日本www.色| 中文字幕久久精品一区二区| 日韩欧美国产三级| 第一次破处视频| 日韩在线二区| 精品国产视频在线| 三上悠亚作品在线观看| 国产一区二区你懂的| 亚洲xxxxx| 成人毛片视频免费看| 国产精品丝袜黑色高跟| 资源网第一页久久久| 国产午夜精品久久久久免费视| 亚洲日本在线观看| 午夜两性免费视频| 国产一区二区| 色av中文字幕一区| 欧美日韩激情在线观看| 亚洲精品韩国| 国产成人精品久久久| 中文字幕日本人妻久久久免费| 成人av网站在线观看免费| 精品一区二区不卡| 国产美女视频一区二区三区 | 激情欧美一区二区| 96国产粉嫩美女| 丝袜美腿美女被狂躁在线观看| 综合激情成人伊人| 2018中文字幕第一页| 亚洲一区导航| 久久视频在线免费观看| 国产一级做a爰片在线看免费| 国内成人免费视频| 四虎永久免费网站| 国产精品一区三区在线观看| 日韩亚洲在线观看| 一级黄色小视频| 99久久精品国产一区二区三区| 欧洲高清一区二区| 欧美三级理伦电影| 欧美精品久久99久久在免费线| 中文字幕22页| 国产精品毛片久久久| 亚洲成av人影院在线观看| 干b视频在线观看| 综合日韩在线| 成人久久18免费网站漫画| 影音先锋在线视频| 精品国产91乱码一区二区三区| 无码熟妇人妻av| 欧美精品91| 国产精品爽爽爽| 亚洲乱码在线观看| 久久久久免费观看| 少妇人妻互换不带套| 成人久久一区| 欧美性做爰毛片| 精品人妻无码一区二区三区蜜桃一| 91免费版在线看| 国产爆乳无码一区二区麻豆| 久久亚洲精品中文字幕| 日韩精品免费一线在线观看| 成人在线观看高清| 蜜臀a∨国产成人精品| 精品无码久久久久久久动漫| 欧美电影免费观看| 亚洲福利视频久久| 视频一区二区三区四区五区| 国产一二精品视频| 久艹视频在线免费观看| 美国十次综合久久| 中日韩午夜理伦电影免费| av中文在线播放| 成人深夜福利app| 裸体裸乳免费看| 美女福利一区| 午夜免费久久久久| 日韩午夜影院| 色综合夜色一区| 国产精品jizz| 紧缚奴在线一区二区三区| 黄页网站在线观看视频| 欧美三级情趣内衣| 国产另类自拍| 伊人久久精品| 欧美制服第一页| 视频在线这里都是精品| 欧美高清性hdvideosex| 九九热国产视频| 亚洲色图一区二区三区| 人妻熟女aⅴ一区二区三区汇编| 久久97超碰色| 大桥未久一区二区三区| 亚洲精品一级二级三级| 欧美在线视频免费播放| 国产在线看片| 亚洲图片在线综合| 婷婷伊人综合中文字幕| 欧美一区二区高清| 波多野结衣网站| 国产亚洲女人久久久久毛片| 亚洲精品一二三四| 韩日精品在线| 狠狠色综合色区| 国产美女视频一区二区 | 亚洲高潮无码久久| 欧美日韩高清| 欧美日韩一区在线视频| 最近在线中文字幕| 欧美第一页在线| 天天操天天干天天爽| 91精品国产综合久久精品| 69av视频在线观看| 欧美日韩另类在线| 国产无遮挡免费视频| 亚洲精品乱码久久久久久黑人| 国产小视频你懂的| 国产毛片一区二区| 国内精品在线观看视频| 欧美福利电影在线观看| 成年人免费观看的视频| aaa国产精品视频| 91夜夜未满十八勿入爽爽影院| 精品久久在线| 国产区精品视频| 欧美亚洲天堂| 精品中文字幕久久久久久| 人妻少妇一区二区三区| 亚洲成人激情在线| 欧美一级一区二区三区| 亚洲成人a**站| 神马精品久久| 亚洲视频在线观看| 成年午夜在线| 欧美xxx久久| 五月婷婷六月婷婷| 在线一区二区视频| 中文字幕在线观看国产| 欧美日本免费一区二区三区| 日产精品久久久久| 亚洲高清免费在线| 国产一二三av| 99视频在线精品| 污视频网址在线观看| 久久综合综合久久综合| 日韩精品 欧美| 99热免费精品在线观看| 亚洲永久一区二区三区在线| 欧美国产美女| 欧美极品jizzhd欧美| 欧美美女在线| 中文字幕综合在线观看| 韩国自拍一区| 激情婷婷综合网| 精品一区二区三区在线观看| 午夜性福利视频| 337p粉嫩大胆噜噜噜噜噜91av | 91精品国产高清久久久久久| 天堂地址在线www| 欧美精品在线免费观看| 五月天婷婷在线视频| 九九热视频这里只有精品| 精品999视频| 日韩在线欧美在线| 久草在线视频资源| 国产成人福利网站| 国产成人免费av一区二区午夜| 成人xxxxx色| 国内成人精品| 欧美aaaaa喷水| 成人性生交大片免费看中文视频| 精品中文字幕人| 日韩在线二区| 成年人午夜视频在线观看 | 午夜精品福利一区二区三区av | 国产精品久久久久久成人| 亚洲天堂av一区| 日日夜夜综合网| 337p亚洲精品色噜噜狠狠| 色丁香婷婷综合久久| 在线精品91av| 国产免费拔擦拔擦8x高清在线人| 国产精品美乳在线观看| 国产厕拍一区| 一区二区三区四区国产| 国产伦理一区| 午夜影院免费版| 国产三级一区二区| 国产无遮无挡120秒| 欧美日韩一级视频| 亚洲精品国产精品国自产网站按摩| 欧美视频一二三| 国产ts变态重口人妖hd| 欧美精品久久天天躁| 欧美亚洲日本| 国内精品久久久久久久| 国产精选在线| 91亚洲精品一区| 久久一区二区三区电影| 日韩精品―中文字幕| 国产模特精品视频久久久久| 午夜一区二区视频| 久久精品亚洲麻豆av一区二区| 国产一级二级三级| 亚洲国产成人av好男人在线观看| 在线观看视频二区| 欧美精品99久久久**| 国产香蕉视频在线看| 91av视频在线| 国产成人aa在线观看网站站| 伊人久久在线观看| 久久99精品国产麻豆婷婷| 手机看片福利视频| 日韩欧美国产激情| 五月婷婷六月色| 中文日韩在线观看| 国产精品专区免费| 久久综合九色综合网站| 夜夜精品视频| 催眠调教后宫乱淫校园| 一个色综合网站| 蜜臀av免费在线观看| 久久久久国产精品一区| 白嫩白嫩国产精品| 97视频久久久| 97久久超碰国产精品| 日韩xxxxxxxxx| 亚洲精品在线91| xxxxxx欧美| 欧美日韩在线一区二区三区| 亚洲伊人网站| av噜噜在线观看| 成人欧美一区二区三区在线播放| 96亚洲精品久久久蜜桃| 日韩视频免费大全中文字幕| 日本一区二区中文字幕| 在线视频欧美一区| 国产剧情在线观看一区二区| 欧美色图亚洲视频| 日韩欧美福利视频| 国产视频第一页在线观看| 国产精品444| 日韩久久精品| 日本黄色www| 香蕉影视欧美成人| 青青青手机在线视频观看| 国产盗摄xxxx视频xxx69| 97久久夜色精品国产| 午夜影院免费观看视频| 亚洲风情在线资源站| 四虎影视在线观看2413| 国产精品久久久久久亚洲调教 | 久久综合资源网| 欧美日韩 一区二区三区| 日韩小视频在线| 成人午夜三级| 狠狠操精品视频| 99国产一区二区三精品乱码| 色屁屁影院www国产高清麻豆| 日韩片之四级片| 国产中文字幕在线视频| 国产女人18毛片水18精品| 综合视频在线| 中文字幕精品视频在线| 色婷婷av久久久久久久| 欧美日韩在线看片| 黄色国产精品一区二区三区| 日韩和欧美一区二区三区| 国产精品300页| 亚洲一区二区三区国产| 日韩av地址| 91美女福利视频高清| 亚洲免费高清| 美女100%露胸无遮挡| 欧美变态口味重另类| 日韩免费小视频| 欧美精品一区二区三区四区五区 | 特级丰满少妇一级aaaa爱毛片| 欧洲亚洲女同hd| 91精品国产乱码久久久久久| 爱情岛论坛成人| 亚洲黄网站在线观看| 国产专区在线| 国内一区在线| 国产精品99久久久| 国产精品第6页|