[英]onSurfaceCreated() is not called when activity resumes
我遇到了SurfaceView
問題,這個問題似乎與對這些SurfaceView
回調如何工作的任何誤解有關。
讓我們嘗試解決這個理論上的問題:
我有一個活動A ,其中包含一個fragment
,該fragment
實時繪制對象,並運行thread
來完成此任務(定期調用View
的繪制方法並將其繪制在SurfaceView
)。
然后,我切換到活動B ,該活動承載另一個顯示一些UI的片段。
每當我切換到活動B時 ,我都可以看到SurfaceView
被破壞了,因此調用了onSurfaceDestroyed()
回調,並在此停止了繪圖線程。
到目前為止,一切都還不錯,很明顯,但是當我回到活動A時 ,並未創建SurfaceView
,因此未調用onSurfaceCreated()
,因此我的繪圖線程將無法啟動。
通過調試,我可以看到從B返回到A時我的View
存在,並且可以在線程正在運行時繪制它,但是SurfaceView
我的線程運行,我需要再次創建SurfaceView
。
因此,我的問題 (已編輯):
如果片段可見,為什么返回片段A時未創建SurfaceView
?
很抱歉,我無法提供此問題的任何代碼,但它比任何其他類型的代碼更具理論意義。
編輯:進度更新
經過更多研究和測試之后,我意識到任何片段的onCreateView()
在其生命周期中僅被調用一次,直到將其從片段管理器中刪除並且不再由框架管理為止。
當使用它的片段在調用onDestroyView()
之前不再可見時, SurfaceView
被銷毀了,但可悲的是(我不明白為什么) 當它再次變得可見時 , 它並沒有被重新創建 ,這就是我的來源問題。 我需要在該片段可見時再次創建SurfaceView
,以便它可以在框架調用onSurfaceCreated()
啟動我的繪圖線程。
我嘗試繪制的布局包含兩個視圖,一個由框架管理,另一個由SurfaceView繪制。 當我從B重新回到Activity A時,我知道該片段是可見的,因為我可以看到由適當管理的框架管理的視圖,但是沒有跟蹤由創建SurfaceView
時開始的線程管理的視圖,因為此SurfaceView
尚未創建。
我仍然不知道為什么android框架不會自己創建SurfaceView
,但是我要做的就是將View
的可見性強制為VISIBLE
,並且達到了目的。 當我明確告訴View
在Fragment
的onResume()
方法中可見時, SurfaceHolder
回調開始按預期工作:
myView.setVisibility(View.VISIBLE);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.