Android應用開發—setResult()的調用時機

本文轉載自setResult()的調用時機,此處做了重新的排版,只是感覺markdown的排版比較好看些,侵刪。

今天遇到這樣一個問題,我在Activity-A中用startActivityForResult()方法啟動了Activity-B,并且在B中通過setResult()方法給A返回值,由于某些原因不能在setResult()之后立刻調用finish()函數,只能通過用戶按Back鍵自己退出到A。按理說從B退出回到Aactivity-A過程中,A中的 onActivityResult() 應該被調用, 可是通過log發現,整個操作過程中 onActivityResult() 始終沒有被調用。 前后研究了半天才發現 是 setResult() 的調用時機不對造成的,因為在我是在B的onStop() 函數中調用setResult()函數的,這個時候的seResult是沒有任何意義的,因為已經錯過了A onActivityResult() 的調用時機。

因為在 B 退回 A過程中,執行過程是

B---onPause
A---onActivityResult
A---onRestart
A---onStart
A---onResume
B---onStop
B---onDestroy

從上面過程可以看出,首先是B處于Pause 狀態,然后等待A執行 onRestart-> onStart ->onResume,然后才是B 的onStop->onDestroy,而A的 onActivityResult() 需要在B的onPause之后,A的onRestart之前這中間調用,所以B中的setResult()函數應該放在B的onPause之前調用。

另外我試驗了一下,如果把setResult()放在 B 的 onPause() 里面調用,結果仍然是無效的。

那么setResult()應該在什么時候調用呢?從源碼可以看出,Activity返回result是在被finish的時候,也就是說調用setResult()方法必須在finish()之前。所以在onPause、onStop、onDestroy方法中調用setResult()也有可能不會返回成功,因為這些方法調用不一定是在finish之前的 (why,to find out the reason),當然在onCreate()就調用setResult肯定是在finish之前的,但是又不滿足業務需要。

實際使用場景有兩個:

  • 按BACK鍵從一個Activity退出來的,一按BACK,android就會自動調用Activity的finish()方法。
@Overridepublic void onBackPressed(){Log.i(TAG, "onBackPressed");setResult(Const.LIVE_OK);super.onBackPressed();}
  • 按點擊事件中顯式的調用finish()
setResult(RESULT_OK);
finish();

執行過程為:

B---onBackPressed
B---finish
B---onPause
A---onActivityResult
A---onRestart
A---onStart
A---onResume
B---onStop
B---onDestroy

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450091.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450091.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450091.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

記錄騰訊云中礦機病毒處理過程(重裝系統了fu*k)

2019-1-21日常上班的周一 剛想學學kafka,登錄與服務器看看把,誰知ssh特別慢,很奇怪,我以為是我網速問題,斷了wifi,換了網線,通過iterm想要ssh rootx.x.x.x,但是上不去? 就…

從創業失敗中學到的七條教訓

摘要:每個創業者不可能首次創業就能成功。他們的失敗經驗,或許可以指導其他創業者獲得迅速成功。Joshua Hays在文章《7 things I learned from failing that you can avoid》總結了創業失敗后獲得的七條教訓,希望其他創業者可以從中有所收獲&…

unexpected EOF while looking for matching ``‘

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 只是簡單的測試一個shell 腳本,報錯如題。 原因: 雙引號格式不對。 引號切換為英語格式重新輸入,再運…

對象反序列化出現類型不匹配的情況(spring-boot-devtools)

目前在做springboot項目的shiro session redis共享功能。但是有一個對象我把它放到redis中之后再取出來就會出現類型不匹配的異常 AuthorizationUser user (AuthorizationUser) cache.getSuper(key); 異常信息: java.lang.ClassCastException: com.ch.evaluation.a…

最后一周總結

1) 回歸第一周目標 對于第一周的目標,在提高代碼量,多寫多練方面達到了,之前結點編程時還不是很熟悉python,現在寫的比較熟練了,同時學習了一門新的語言Julia,在學習的過程中也看了Julia和Flux的…

音視頻多媒體協議相關資料匯總

未知問題: 編碼,封裝,協議的區別: 如何將TS源流重新封裝并通過P2P協議傳輸在安卓終端和蘋果終端播放封裝 介紹完了視頻編碼后,再來介紹一些封裝。沿用前面的比喻,封裝可以理解為采用哪種貨車去運輸&…

谷歌地圖VS蘋果地圖:大數據領域競爭

摘要:iOS 6推出之后,爭議最大的是什么?蘋果地圖。蘋果地圖成為人們抨擊iOS 6的首選,而蘋果放棄谷歌地圖選擇自力更生是迫不得已。蘋果和谷歌之間的競爭領域可以用三個字來概括:大數據。谷歌擁有大數據,而蘋…

Shell 參數傳遞、 $* 與 $@ 區別

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 傳遞參數 腳本內獲取參數的格式為: $n。n 代表一個數字,1 為執行腳本的第一個參數, 2 為執行腳本的第…

微軟正在考慮將Windows默認瀏覽器改為Chromium

據外媒報道,微軟正在構建一個基于Chromium的瀏覽器,代號為Anaheim,目標是取代Windows中的Edge。 Microsoft Edge是微軟于2015年推出的瀏覽器,該瀏覽器取代了IE成為Windows 10的默認瀏覽器。盡管如此,Microsoft Edge并沒…

css文本屬性

text-align文本水平對齊屬性 取值 left(默認) right center text-indent 文本縮進屬性 單位可以是px也可以是em(字符) text-decoration 文本裝飾屬性 取值 underline(下劃線) overline(上劃線) line-though(刪除線) 轉載于:https://www.cnblogs.com/c-aha/p/10298422.html

三次握手的第三個ACK包丟了,會發生什么?

轉載自三次握手的第三個ACK包丟了,TCP的處理方式 三次握手的第三個ACK包丟了,客戶端認為連接建立,寫數據時,會觸發RST。 當Client端收到Server的SYNACK應答后,其狀態變為ESTABLISHED,并發送ACK包給Server&a…

運營商與廠商發力 智能機進入700元以下時代

千元智能手機的成功,并沒有讓運營商以及手機廠商感到滿足。繼中國電信宣布重點打造600元智能手機后,近日,中國聯通也表態將發力700元以下智能手機市場。而運營商的表態立刻引來了多家手機廠商的呼應,產品價格的繼續下探&#xff0…

輸入一個數,判斷他是不是質數

思路:先給一個數字x,然后讓這個數字x從2開始除,如果 x 從 2 除到 (x-1) 能被整除,那這就不是質數.如果不能被整除,那就是質數. 當然如果x小于2,那x必然不是質數,也不是合數. #輸入一個數,判斷他是不是質數 x int(input("請輸入一個數字:")) #先輸入一個數字 co…

一分鐘了解四層/七層反向代理

轉自公眾號:架構師之路今天花幾分鐘簡單和大家解釋一下。場景:訪問用戶通過proxy請求被訪問的真實服務器 路徑:用戶 -> proxy -> real-server什么是代理? 回答:[proxy]代表[訪問用戶],此時proxy是代理…

tcp建立連接為什么需要三次握手

這是一個看似很“簡單”的問題,但貌似并沒有一個官方統一的答案。搜索了相關的資料,列舉出一些答案。 以下部分轉載自:tcp建立連接為什么需要三次握手 在《計算機網絡》一書中其中有提到,三次握手的目的是“為了防止已經失效的連…

SFTPUtils工具類及使用

配置maven <dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.54</version> </dependency> 工具類 package com.sftp;import com.jcraft.jsch.*; import com.jcraft.jsch.ChannelSftp.LsE…

國內手機產業混亂:產業一窩蜂 企業撈快錢

對于當前國內手機行業的現狀&#xff0c;本報記者采訪的多位業內人士表示&#xff0c;目前國內手機行業仍是“紅海”格局&#xff0c;多數企業并不了解手機產業規律&#xff0c;看到有錢賺就“一窩蜂”上項目。有行業人士認為&#xff0c;要走出目前行業的現狀&#xff0c;企業…

查看私密文章方法

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 我只是記錄下&#xff0c;曾經寫過一次文章&#xff0c;勾選了私密&#xff0c;再后來就找不到了。 下面這個鏈接可以查出那篇文章&…

SDUT-3364_歐拉回路

數據結構實驗之圖論八&#xff1a;歐拉回路 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 在哥尼斯堡的一個公園里&#xff0c;有七座橋將普雷格爾河中兩個島及島與河岸連接起來。 能否走過這樣的七座橋&#xff0c;并且每橋只走一次&#xff1f;瑞士數學…

Tcp三次握手和四次揮手狀態圖

三次握手 四次揮手 正常情況下 同時揮手 SYN攻擊&#xff1a; 在三次握手過程中&#xff0c;Server發送SYN-ACK之后&#xff0c;收到Client的ACK之前的TCP連接稱為半連接&#xff08;half-open connect&#xff09;&#xff0c;此時Server處于SYN_RCVD狀態&#xff0c;當…