iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 19
0
自我挑戰組

跟Kotlin一起來聊Android元件 或許還有應用,或許還有一些資訊雜談系列 第 19

當Activity宣告為singleTask時,從不同地方要傳資料就要使用onNewIntent覆寫

  • 分享至 

  • xImage
  •  

今天碰到了幾個問題

  1. 首先是使用viewModel觀察Retofit的response時,會重覆收到觀察。
  • 由於我會在觀察時建立活動,所以就會開啟好幾個同類活動實體。於是我將這個活動設定成android:launchMode="singleTask",只允許有一個活動實例存在。
  • 明明response就回傳一次,卻會收到好幾次的觀察通知。
<activity android:name=".MainActivity"
          android:screenOrientation="portrait"
          android:launchMode="singleTask">
          </activity>
  1. 所以就會遇到一個問題,當我活動實例不會被重覆建立的同時,我如果需要透過intent傳遞資料時要怎麼辦?
  • 答案是透過覆寫onNewIntent在裡面去接收資料。
     override fun onNewIntent(intent: Intent?) {
        super.onNewIntent(intent)
        //接收data
        var mydata=intent?.getStringExtra("Mydata")
        textView.text=mydata
    }

原因是我在之前就已經開啟過這個MainActivity實例,所以當我切換到別的活動並傳遞資料到這個MainActivity時,當前MainActivity正處在OnStop或onPause。

那麼會形成下列執行順序

onNewIntent->onRestart->onStart->onResume

系統不會再跑OnCreate,而是改用onNewIntent。

但是,不能保證這個實例會一直存活,所以最好在OnCreate跟onNewIntent都呼叫同一個讀取資料的方法。


上一篇
Room小技巧 insert資料時,如果Entity將欄位有primary key屬性,又設定為autoGenerate = true 要怎麼處理
下一篇
Retrofit X kotlin 圖片上傳功能實作
系列文
跟Kotlin一起來聊Android元件 或許還有應用,或許還有一些資訊雜談30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言