粮草先行——Android折叠屏开发技术点番外篇之运行时变更处理原则
上一篇文章中,我們有提到Activity在屏幕尺寸發(fā)生變更時(shí)的處理方式,總共有兩種:
同樣,這兩種方式也同時(shí)適用于改變屏幕方向、更改系統(tǒng)語(yǔ)言、甚至輸入法等等。
因此,本文也同樣適用于改變屏幕方向等情況的處理。
或許你會(huì)有疑問(wèn):我們?cè)撊绾芜x擇合適的處理方式呢?
我給你的答案是:選擇最合適的。
這么說(shuō)好像跟沒(méi)說(shuō)一樣,別急,給大家舉個(gè)例子就明白了:
比如更改屏幕方向,由豎屏轉(zhuǎn)換為橫屏,如果我們只有一套布局,符合按比例縮放仍然顯示正常的話,我們大可以選擇第2種處理方案。但是如果我們的橫豎屏布局是不同的,比如系統(tǒng)中的“設(shè)置”應(yīng)用,那么我們選擇第2種處理方案就是不合適的。
下圖:
這是一個(gè)典型的橫豎屏分別采用不同布局的例子。
我們確定要采取那種解決方案后,接下來(lái)很可能要面對(duì)另一個(gè)問(wèn)題,就是性能瓶頸。
根據(jù)前一篇文章的實(shí)驗(yàn)結(jié)果,在發(fā)生橫豎屏切換的時(shí)候,Activity的生命周期通常會(huì)按照如下順序依次執(zhí)行:
D/MainActivity: onPause
D/MainActivity: onSaveInstanceState
D/MainActivity: onStop
D/MainActivity: onDestroy
D/MainActivity: onCreate
D/MainActivity: onStart
D/MainActivity: onRestoreInstanceState
D/MainActivity: onResume
如果我們?cè)谏芷谥凶隽艘恍┓敝氐墓ぷ?#xff0c;那么整個(gè)Activity在重啟的過(guò)程中就會(huì)很慢。
要解決這個(gè)問(wèn)題,首先我們要找Fragment幫忙,因?yàn)锽undle并不是用來(lái)傳遞大型對(duì)象的,而且這個(gè)對(duì)象還需要序列化和反序列化,如此執(zhí)行起來(lái)就更慢了。
當(dāng)然,如果你只是保存一些整型或者字符串的話,單純使用Bundle而不借助Fragment也是可以的,但是這樣的場(chǎng)景在實(shí)際開發(fā)中并不常見(jiàn)。
要借助Fragment來(lái)中轉(zhuǎn)對(duì)象,我們采用下面三步走的方式:
下面用具體的代碼片來(lái)演示:
首先來(lái)看Fragment類:
我們?cè)賮?lái)看Activity類:
public class MyActivity extends Activity {private TestFragment mTestFragment ;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);FragmentManager fm = getFragmentManager();mTestFragment = (TestFragment)fm.findFragmentByTag(“test”);if (retainedFragment == null) {mTestFragment = new TestFragment ();fm.beginTransaction().add(mTestFragment, “test”).commit();mTestFragment.setData(restoreData());}}@Overridepublic void onDestroy() {super.onDestroy();mTestFragment.setData(saveData());} }這里還要特別注意一點(diǎn):在中轉(zhuǎn)對(duì)象數(shù)據(jù)時(shí),不要傳入與Activity緊密相關(guān)的對(duì)象,比如View,否則會(huì)造成內(nèi)存泄漏。
至此,就完成了對(duì)重啟Activity方案的性能優(yōu)化。
轉(zhuǎn)載于:https://www.cnblogs.com/wenhanxiao/p/10373717.html
總結(jié)
以上是生活随笔為你收集整理的粮草先行——Android折叠屏开发技术点番外篇之运行时变更处理原则的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 冯氏集团于进博会发布报告,分析影响全球服
- 下一篇: android sh 指令_Java/A