小視頻程序源碼Android 屏幕橫豎切換的問題

屏幕在切換的時候,生命週期會重新運行一遍,google給予我們兩種解決方式,一種是將含有狀態對對象保存起來,在切換後恢復數據;另一種是切換時禁止重新運行聲明週期,需要我們手動處理數據。
方法一:
通過碎片Fragment來實現數據存儲,這裏說明一下爲什麼用fragment,因爲系統爲我們提供的savedInstanceState bundle 並不是攜帶大型對象,而且存儲數據必須序列化,在通過反序列化進行數據還原,有可能消耗大量內存使得配置變更速度緩慢。
1,在Fragment中聲明要恢復的對象。
2,在創建片段後調用setRetainInstance(boolean)
3,通過fragmentManager 添加到activity中
4 , 在狀態切換時,通過fragmentManager findFragment 方法找到碎片恢復數據。
Fragment如下:

public class DataFragment extends Fragment{

	private  MyDataObject  data;
	
	public void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		setRetainInstance(true)
	}
	
	public void setData(MyDataObject data){
		this.data=data;
	}

	publkic MyDataObject getData(){

		return  data;
	
	}
}

Activity如下:

public  MainActrivity extends Activity{

	DataFragment dataFragment;
	
	public void onCreate(Bundle savedInstanceState){
	
		FragmentManager manager=getSupportFragment();
	
		dataFragment=(DataFragment)manager.findFragmentByTag("data")

		if(dataFragment==null){
			
			dataFragment=new DataFragment();

			dataFragment.setData("你的數據實體")

			manager.beginTransaction().add(dataFragment,"data").commit();

		}
		
		Log.e("zzzz", dataFragment.getData().toString());
	
	}

}

方法二:
自己處理切換屏幕的操作
1,在Mainfest配置文件中爲activity配置屬性android:configChanges=“orientation|keyboardHidden|screenSize”
2,在Activity中重寫方法onConfigurationChanged()

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章