簡體   English   中英

活動恢復時不會調用onSurfaceCreated()

[英]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 ,並且達到了目的。 當我明確告訴ViewFragmentonResume()方法中可見時, SurfaceHolder回調開始按預期工作:

myView.setVisibility(View.VISIBLE);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM