ActivityGroup對子Activity的管理

ActivityGroup是個用來承載多個Activity的容器,自身也是繼承Activity,主要用於切換Activity(Layout),類似新浪微博軟件切換界面。

public class MainActivityGroup extends ActivityGroup {

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main_layout);

}

}

用法與Activity類似,生命週期也一樣。onCreate->onStart->onResume->onPause->onStop->onDestroy

佈局文件的weight屬性這裏第一次派上了用途,我的佈局類似新浪微博的界面,上邊是一個刷新按鈕跟文字,下面是一排ImageView來點擊切換Activity,中間是Activity的佈局。上下的高度定義好以後,我要讓activity充滿剩餘空間,就用了weight=1這個屬性。其他用法暫時沒用到。

點擊開始用ActivityGroup來啓動子Activity:

1,activity_container(這是Group佈局裏面的用來裝Activity的Layout)要移除所有的view

activity_container.removeAllViews();

2,增加view到裏面

activity_container.addView(

this.getLocalActivityManager().startActivty(str_id,intent).getDecorView());

其中的ActivityManager是ActivityGroup私有的一個成員,用來管理子Activity,這裏用來啓動。參數是id,和一個intent對象。根據id用key-value的方式,把intent放入到自己的Map裏面,用於自己的管理。

(1)當StartActivity時,如果key是不存在的,那麼啓動一個新的Activity,然後把key與intent放到自己的map

(2)當key是存在的。那麼當前的Activity 與新的Activity要怎麼切換變化?

這就跟Intent的Flag相關了。第一,如果當前的Activity的intent.Flag設置的是多模式或者FLAG_ACTIVITY_SINGLE_TOP,那麼子Activity就會被切換到後臺,調用Intent傳來的Activity,這個新的Activity也會根據自身的Flag,而出現不同的生命週期變化。

舉個例子,如果每個子Activity都是這樣的方式啓動的

getLocalActivityManager().

startActivity(CampusConstants.ID_ACTIVITY[id], new Intent(MainActivityGroup.this,activity).

addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)).getDecorView());

那麼切換時,Activity就不用每一次都Oncreate重新建立

如果使用的是

FLAG_ACTIVITY_CLEAR_TOP 那麼每一次切換都會重新onCreate一遍。

發佈了18 篇原創文章 · 獲贊 20 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章