Android基礎(chǔ)06-Activity及其生命周期

一、Activity初步認識:【創(chuàng)建机隙、配置蜘拉、啟動Activity】

(一)、創(chuàng)建Activity:

創(chuàng)建Activity:繼承于Activity或其子類有鹿,重寫onCreate()方法旭旭。

(二)、Activity的注冊配置:

作為四大組件之一的Activity葱跋,必須要在AndroidManifest清單文件中進行注冊持寄。如果沒有配置源梭,而又在程序中啟動了該Activity,將拋出異常(ActivityNotFoundException)稍味。

注冊配置的核心代碼:

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme">

android:name=".MainActivity"

android:label="@string/app_name">

android:name=".HeadpicActivity"

android:label="@string/title_activity_headpic">

【附加思考】:

當在AndroidManifest清單文件中废麻,設(shè)置多個頁面都是默認啟動頁,會報錯嗎模庐?如果不 報錯烛愧,到底是執(zhí)行哪個頁面呢?

當在AndroidManifest清單文件中掂碱,如果不設(shè)置默認啟動頁怜姿,會報錯嗎?

(三)疼燥、啟動Activity:

在Android應(yīng)用里各組件之間通信使用Intent沧卢。一個Activity通過Intent來表達自己的“意圖”。

常用有兩種方式:

Intent intent = new Intent(MainActivity.this , NextActivity.class);

Intent intent = new Intent();

?intent.setClass(MainActivity.this , NextActivity.class);

常用啟動方式有兩種:

startActivity();

startActivityForResult();

(四)悴了、Activity之間交換數(shù)據(jù):

第一種方式:

甲頁面利用intent對象的putExtra()方法傳值搏恤,乙頁面利用getStringExtra()、getIntExtra()等系列方法來一一接收值湃交;

第二種方式:【常用】

甲頁面利用bundle對象來保存所有需要傳遞的數(shù)值熟空,通過intent的putExtras()方法傳值,乙頁面利用intent對象的getExtras()方法返回bundle對象搞莺,將所有接收的數(shù)據(jù)放在bundle對象中息罗,利用bundle的get系列方法一一去除數(shù)據(jù)。

????? ? 【備注:】如果甲頁面使用putExtras()方法傳值才沧,則乙頁面使用getExtras()接收值迈喉。如果甲頁面使用putExtra()方法傳值,則乙頁面要使用getBundleExtra()方法接收值温圆。

Activity之間是否可以傳遞對象呢挨摸?【掌握Serializable的用法】

Serializable的用法

Parcelable的用法

1、傳遞一般數(shù)據(jù)的核心代碼:

(1)岁歉、MainActivity頁面:

publicvoidclickButton(View view) {

switch(view.getId()) {

caseR.id.button_main_tonext:

Intent intent =newIntent(MainActivity.this, NextActivity.class);

Bundle bundle =newBundle();

bundle.putString("myname", "hehaitao");

bundle.putInt("age", 16);

intent.putExtras(bundle);

startActivity(intent);

break;

}

}

(2)得运、NextActivity頁面:

@Override

protectedvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_next);

// 接收第一個頁面的傳值

Intent intent = getIntent();

Bundle bundle = intent.getExtras();

String name = bundle.getString("myname");

intage = bundle.getInt("age");

this.setTitle(name + ":" + age);

}

2、傳遞對象數(shù)據(jù)的核心代碼:

(1)锅移、Person對象核心代碼:

publicclassPersonimplementsSerializable {

privateString userName;

privateintage;

privateintsex;

privateList infoList;

publicList getInfoList() {

returninfoList;

}

publicvoidsetInfoList(List infoList) {

this.infoList = infoList;

}

publicString getUserName() {

returnuserName;

}

publicvoidsetUserName(String userName) {

this.userName = userName;

}

publicintgetAge() {

returnage;

}

publicvoidsetAge(intage) {

this.age = age;

}

publicintgetSex() {

returnsex;

}

publicvoidsetSex(int

this.sex = sex;

}

}

(2)熔掺、MainActivity頁面:

publicclassMainActivityextendsActivity {

privatePerson person =null;

@Override

protectedvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

List list =newArrayList();

list.add("one");

list.add("two");

list.add("three");

person =newPerson();

person.setUserName("wangxiangjun");

person.setAge(40);

person.setSex(1);

person.setInfoList(list);

}

publicvoidclickButton(View view) {

switch(view.getId()) {

caseR.id.button_main_submit:

Intent intent =newIntent(MainActivity.this,

ReceiverActivity.class);

Bundle bundle =newBundle();

bundle.putSerializable("person", person);

intent.putExtras(bundle);

startActivity(intent);

break;

}

}

@Override

publicbooleanonCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

returntrue;

}

}

(3)、MainActivity頁面:

publicclassReceiverActivityextendsActivity {

@Override

protectedvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_receiver);

Intent intent = getIntent();

Bundle bundle = intent.getExtras();

// 接收Serializable對象

Person data = (Person) bundle.getSerializable("person");

setTitle(data.getUserName() + ":" + data.getAge() + ":"

+ data.getInfoList());

}

@Override

publicbooleanonCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.receiver, menu);

returntrue;

}

}


二非剃、Activity——調(diào)用另一個Activity并返回結(jié)果:

(一)置逻、概念:

甲頁面調(diào)用乙頁面,當用戶在乙頁面完成任務(wù)后备绽,程序自動返回到甲頁面券坞,而甲頁面必須能夠獲取到用戶在完成乙頁面后傳遞的數(shù)據(jù)結(jié)果鬓催。

(二)、做法:

與普通的頁面交換數(shù)據(jù)不同的是报慕,要使用startActivityForResult()方法來啟動另一個Activity深浮。

(三)、示例代碼:

1眠冈、MainActivity頁面:

publicclassMainActivityextendsActivity {

privateImageView imageView_main_headpic;

@Override

protectedvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

imageView_main_headpic = (ImageView) findViewById(R.id.imageView_main_headpic);

}

@Override

publicbooleanonCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

returntrue;

}

publicvoidclickButton(View view) {

switch(view.getId()) {

caseR.id.button_main_selectpic:

Intent intent =newIntent(MainActivity.this, HeadpicActivity.class);

startActivityForResult(intent, 0);

break;

}

}

@Override

protectedvoidonActivityResult(intrequestCode,intresultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if(requestCode == 0 && resultCode == 1) {

Bundle bundle = data.getExtras();

intimgid = bundle.getInt("imgId");

imageView_main_headpic.setImageResource(imgid);

}

}

}

2飞苇、NextActivity頁面:

publicclassHeadpicActivityextendsActivity {

privateGridView gridView_headpic_show;

// 定義數(shù)據(jù)源

privateint[] imgIds =newint[] { R.drawable.img01, R.drawable.img02,

R.drawable.img03, R.drawable.img04, R.drawable.img05,

R.drawable.img06, R.drawable.img07, R.drawable.img08,

R.drawable.img09};

@Override

protectedvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_headpic);

gridView_headpic_show = (GridView) findViewById(R.id.gridView_headpic_show);

List> list =newArrayList>();

for(inti = 0; i < imgIds.length; i++) {

Map map =newHashMap();

map.put("headpic", imgIds[i]);

map.put("picname", "頭像—" + i);

list.add(map);

}

SimpleAdapter adapter =newSimpleAdapter(this, list,

R.layout.item_gridview_headpic,newString[] { "picname",

"headpic" },newint[] {

R.id.text_item_gridview_picname,

R.id.imageView_item_gridview_headpic});

gridView_headpic_show.setAdapter(adapter);

gridView_headpic_show.setOnItemClickListener(newOnItemClickListener() {

@Override

publicvoidonItemClick(AdapterView parent, View view,

intposition,longid) {

Intent intent = getIntent();

Bundle bundle =newBundle();

bundle.putInt("imgId", imgIds[position]);

intent.putExtras(bundle);

setResult(1, intent);

finish();

}

});

}

@Override

publicbooleanonCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.headpic, menu);

returntrue;

}

}


三、Activity生命周期:

(一)蜗顽、課堂引入:人的生命周期是怎么樣的布卡?

胎兒

嬰兒

兒童、少年雇盖、青年忿等、中年

突發(fā)變故

老年

死亡

(二)、Activity生命周期:

1崔挖、Activity一生中有七種不同的狀態(tài)贸街。

onCreate()

onStart()

onResume()

onPause()

onStop()

onRestart()

onDestroy()

【備注:】

A、七個生命周期組合:

onCreate狸相、onStart薛匪、onResume:啟動應(yīng)用程序

onPause、onStop:失去焦點

onRestart脓鹃、onStart逸尖、onResume:重新獲得焦點

onPause、onStop瘸右、onDestroy?:退出應(yīng)用程序

B娇跟、七個生命周期按階段劃分:

onCreate() --- onDestroy() ? ? ? ? ? ?完整生命周期 ? ?The entire lifetime

onStart() --- onStop() ? ? ? ? ? ? ? ? ? ?可見生命周期 ? ??The visible lifetime:

onResume() --- onPause() ? ? ? ? ? ?前沿生命周期(焦點生命周期) ? ?The foreground lifetime:

2、定義生命周期的作用:

①當用戶接一個電話或切換到另一個程序不會崩潰

②當用戶后臺運行程序時不會銷毀有價值的系統(tǒng)資源

③當用戶離開再返回你的應(yīng)用時不會丟失用戶的進程

④當手機屏幕進行橫豎屏切換的時候不會崩潰或者丟掉用戶的進程

3太颤、生命周期的金字塔圖


(三)苞俘、實例代碼操作:

模仿以下操作,觀察輸出日志龄章,找尋生命周期方法依次回調(diào)的規(guī)律:

打開主界面苗胀,后退鍵退出

打開主界面,進入第二個頁面

打開主界面瓦堵,模擬電話進入及掛機,再次顯示主界面

打開主界面歌亲,HOME鍵退出

打開主界面菇用,HOME鍵退出,再次啟動app

打開主界面陷揪,點擊該界面中捆綁退出事件的按鈕后退出

打開主界面惋鸥,切換橫屏豎屏杂穷。

生命周期執(zhí)行的順序:

04-23 03:51:29.750: I/MainActivity(741): ==MainActivity onCreate執(zhí)行了

04-23 03:51:29.759: I/MainActivity(741): ==MainActivity onStart執(zhí)行了

04-23 03:51:29.759: I/MainActivity(741): ==MainActivity onResume執(zhí)行了

04-23 03:52:04.780: I/MainActivity(741): ==MainActivity onPause執(zhí)行了

04-23 03:52:04.791: I/MainActivity(741): ==MainActivity onStop執(zhí)行了

04-23 03:52:04.791: I/MainActivity(741): ==MainActivity onDestroy執(zhí)行了

04-23 03:52:05.200: I/MainActivity(741): ==MainActivity onCreate執(zhí)行了

04-23 03:52:05.209: I/MainActivity(741): ==MainActivity onStart執(zhí)行了

04-23 03:52:05.329: I/MainActivity(741): ==MainActivity onResume執(zhí)行了

【思考:】

兩個Activity頁面,點第一個中的按鈕卦绣,進入第二個頁面耐量,此時點HOME退出程序。隨后再次啟動app滤港,依次會執(zhí)行哪些生命周期的回調(diào)方法廊蜒。如果再點擊返回,繼續(xù)會執(zhí)行哪些生命周期的回調(diào)方法溅漾?

請自己將依次調(diào)用的方法寫在下面山叮,不要借助機器調(diào)試。

【橫豎屏切換時的生命周期問題的解決】

(一)添履、android:configChanges屬性

對android:configChanges屬性屁倔,一般認為有以下幾點:

1、不設(shè)置Activity的android:configChanges時暮胧,切屏會重新調(diào)用各個生命周期锐借,切橫屏時會執(zhí)行一次,切豎屏時會執(zhí)行兩次

2往衷、設(shè)置Activity的android:configChanges="orientation"時钞翔,切屏還是會重新調(diào)用各個生命周期,切橫炼绘、豎屏時只會執(zhí)行一次

3嗅战、設(shè)置Activity的android:configChanges="orientation|keyboardHidden"時,切屏不會重新調(diào)用各個生命周期俺亮,只會執(zhí)行onConfigurationChanged方法

但是驮捍,自從Android 3.2(API 13),在設(shè)置Activity的android:configChanges="orientation|keyboardHidden"后脚曾,還是一樣 會重新調(diào)用各個生命周期的东且。因為screen size也開始跟著設(shè)備的橫豎切換而改變。所以本讥,在AndroidManifest.xml里設(shè)置的MiniSdkVersion和 TargetSdkVersion屬性大于等于13的情況下珊泳,如果你想阻止程序在運行時重新加載Activity,除了設(shè)置"orientation"拷沸, 你還必須設(shè)置"ScreenSize"色查。

解決方法:

AndroidManifest.xml中設(shè)置android:configChanges="orientation|screenSize“

(四)、Activty生命周期的應(yīng)用場景

游戲過程中電話進入

Android音樂播放器

1撞芍、模擬Android音樂播放器秧了,練習Activity生命周期的示例代碼:

【目的:練習Activity生命周期,要明白不是所有的代碼都寫在onCreate()方法中序无,而是需要根據(jù)需求寫在生命周期的不同的回調(diào)方法中验毡『獯矗】

publicclassMainActivityextendsActivity {

privatestaticfinalStringTAG= "MainActivity";

privatestaticinti= 0;

privateButton button_main_play;

privateTimer timer =null;

privatebooleanflag =false;// 設(shè)置flag標記位的目的是避免程序一開啟就執(zhí)行,而是等點擊了按鈕后才開始晶通。

@Override

protectedvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

button_main_play = (Button) findViewById(R.id.button_main_play);

button_main_play.setOnClickListener(newOnClickListener() {

@Override

publicvoidonClick(View v) {

// 點擊按鈕后執(zhí)行播放

playMusic();

// 設(shè)置flag標記位的目的是避免程序一開啟就執(zhí)行×猓現(xiàn)在點擊了按鈕,允許程序在再次執(zhí)行的時候自動執(zhí)行狮辽。

flag =true;

}

});

}

@Override

protectedvoidonStart() {

super.onStart();

}

@Override

protectedvoidonResume() {

super.onResume();

// 默認flag為false一也,不允許自動執(zhí)行,而是當點擊了播放后才允許執(zhí)行隘竭。

if(flag) {

playMusic();

}

}

@Override

protectedvoidonPause() {

super.onPause();

// 當有電話進入塘秦,會回調(diào)onPause()方法,這個時候要讓播放器停止动看。

// 定時器timer對象的cancel()方法能取消定時器尊剔。

timer.cancel();

}

@Override

protectedvoidonStop() {

super.onStop();

}

@Override

protectedvoidonRestart() {

super.onRestart();

}

@Override

protectedvoidonDestroy() {

super.onDestroy();

// 如果希望程序退出后,下次運行從頭開始播放菱皆,可以將進度初始化為0.

// 如果點HOME退出须误,程序沒有完全退出,下次播放應(yīng)該從上次的進度繼續(xù)執(zhí)行。所以不應(yīng)該初始化。

// 所以將初始化寫在onDestroy()涂召,而不寫在onStop()中捷沸。(因為點HOME退出不會回調(diào)onDestroy()方法试和。)

i= 0;

}

@Override

publicbooleanonCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.main, menu);

returntrue;

}

publicvoidplayMusic() {

// 用定時器輸出數(shù)字來模擬播放器播放的效果

timer =newTimer();

// 定時器timer對象的sechedule()方法有三個參數(shù),第一個表示定時執(zhí)行的任務(wù),第二個參數(shù)表示延遲時間,第三個參數(shù)表示間隔的時間

timer.schedule(newTimerTask() {

@Override

publicvoidrun() {

Log.i(TAG, "==i=" +i);

i++;

}

}, 0, 1000);

}

}


四方淤、任務(wù)與回退棧:

(一)、任務(wù)Task:

1蹄殃、概念:

一個任務(wù)(task)就是在執(zhí)行某項工作時與用戶進行交互的Activity的集合携茂。這些Activity按照被打開的順序依次被安排在一個堆棧中(回退棧)。

2诅岩、主屏頁面:

設(shè)備的主屏是大多數(shù)任務(wù)的啟動位置讳苦,當用戶觸摸一個應(yīng)用程序啟動器圖標(或者app快捷圖標),應(yīng)用程序的任務(wù)就會在前臺顯示吩谦。如果相關(guān)應(yīng)用程序的任務(wù)不存在鸳谜,那么就會有一個新的任務(wù)被創(chuàng)建,并且應(yīng)用程序打開的“主”Activity會作為任務(wù)中的根Activity式廷。

(二)咐扭、回退棧:

1、概念:

在當前的Activity啟動了另一個Activity時,這個新的Activity被放到了堆棧的頂部草描,并且?guī)в薪裹c。前一個Activity并沒有消失策严,而是保存在回退棧中穗慕,此時它處于停止狀態(tài)。

當用戶按下回退按鈕時妻导,當前的Activity會被從回退棧的頂部彈出(這個Activity被銷毀)逛绵,而前一個Activity被恢復(fù)。堆棧中的Activity不會被重新排列倔韭。因此术浪,回退棧的操作跟后進先出的對象結(jié)構(gòu)是一樣的。

在用戶按下回退按鈕時寿酌,當前Activity被銷毀胰苏,并且前一個Activity被恢復(fù)。如果用戶繼續(xù)按回退按鈕醇疼,那么回退棧中的每個Activity會被依次彈出硕并,前一個Activity會被顯示,直到用戶返回主屏(或者返回到任務(wù)開始時運行的那個Activity)秧荆。當所有的Activity從回退棧中被刪除時倔毙,這個任務(wù)就不再存在了。

圖1:用一個時間表顯示了當前回退堆棧中的Activity之間在每個時間點的處理過程


2乙濒、多個任務(wù):


圖2. 兩個任務(wù):任務(wù)B在前臺接受用戶交互陕赃,而任務(wù)A則在后臺等待被恢復(fù)。

【注意:】后臺中可以同時擁有多個任務(wù)颁股,但是如果用戶同時運行了很多后臺任務(wù)么库,系統(tǒng)為了回收內(nèi)存可能銷毀一些后臺的Activity,從而導致Activity的狀態(tài)丟失豌蟋。

? ? ? ? 因為回退堆棧中的Activity不曾被重新排列廊散,因此如果允許用戶從多個Activity中啟動一個特殊的Activity,那么就會創(chuàng)建一個新的Activity實例梧疲,并且在堆棧的頂部彈出(而不是把之前的Activity實例帶到堆棧的頂端)允睹。這樣在你的應(yīng)用程序中一個Activity就可能被實例化多次(甚至來自不同任務(wù))。

(三)幌氮、Activity和Task的默認行為的總結(jié):

1缭受、當Activity A啟動Activity B時,ActivityA被終止该互,但是系統(tǒng)保留了它的狀態(tài)(如滾動條的位置和錄入表單的文本)米者。如果用戶在Activity B中按回退按鈕,Activity A會使用被保存的狀態(tài)來進行恢復(fù)。

2蔓搞、當用戶通過按主頁(Home)按鈕離開一個任務(wù)時胰丁,當前的Activity會被終止,并且被放入后臺喂分。系統(tǒng)會保留任務(wù)中每個Activity的狀態(tài)锦庸。如果用戶隨后通過選擇啟動圖標來恢復(fù)這個任務(wù),那么任務(wù)會來到前臺蒲祈,并且恢復(fù)了堆棧頂部的Activity甘萧。

3、如果用戶按下回退按鈕梆掸,當前的Activity會從堆棧中被彈出并且被銷毀扬卷。堆棧中的前一個Activity會被恢復(fù)。Activity被銷毀時酸钦,系統(tǒng)不會保留Activity的狀態(tài)怪得。

4、Activity能夠被實例化多次钝鸽,甚至來自其他任務(wù)汇恤。


五、Activity啟動模式:

????????在Android中每個界面都是一個Activity拔恰,切換界面操作其實是多個不同Activity之間的實例化操作因谎。在Android中Activity的啟動模式?jīng)Q定了Activity的啟動運行方式。Android總Activity的啟動模式分為四種:

(一)颜懊、Activity啟動模式設(shè)置:


(二)财岔、Activity的四種啟動模式:

? ? 1.?standard(備注:standard是系統(tǒng)默認的啟動模式。)

? ? ? ? 標準啟動模式河爹,每次激活A(yù)ctivity時都會創(chuàng)建Activity匠璧,并放入任務(wù)棧中。每個窗體的getTaskId()保持不變咸这,但是this.hashCode()發(fā)生改變夷恍。

? ? 2.?singleTop

? ? ? ? 如果在任務(wù)的棧頂正好存在該Activity的實例, 就重用該實例媳维,而不會創(chuàng)建新的Activity對象酿雪,不過它會調(diào)用onNewIntent()方法。如果棧頂部不存在就會創(chuàng)建新的實例并放入棧頂(即使棧中已經(jīng)存在該Activity實例侄刽,只要不在棧頂指黎,都會創(chuàng)建實例)。會回調(diào)onNewIntent()方法州丹。

? ? 3.?singleTask

? ? ? ? 如果在棧中已經(jīng)有該Activity的實例醋安,就重用該實例(會調(diào)用實例的onNewIntent())杂彭。重用時,會讓該實例回到棧頂吓揪,因此在它上面的實例將會被移除棧亲怠。如果棧中不存在該實例,將會創(chuàng)建新的實例放入棧中柠辞。

????????和singleTop在名字上即可看出區(qū)別赁炎,即singleTop每次只檢測當前棧頂?shù)腁ctivity是否是我們需要請求創(chuàng)建的,而singleTask則會檢測棧中全部的Activity對象钾腺,從上向下,如果檢測到是我們所請求的則會消滅此Activity對象上面的對象讥裤,直接把檢測到的我們需要的Activity置為棧頂放棒。

? ? 4.?singleInstance

? ? ? ? 與singleTask模式的區(qū)別是存放singleInstance模式窗口對象的回退棧不能有其他任何窗口對象。因此如果該窗口不存在己英,則要新建任務(wù)來存放該singleInstance模式窗口间螟。也就是說getTaskId()會發(fā)現(xiàn)任務(wù)id發(fā)生了變化。

????????此啟動模式和我們使用的瀏覽器工作原理類似损肛,在多個程序中訪問瀏覽器時厢破,如果當前瀏覽器沒有打開,則打開瀏覽器治拿,否則會在當前打開的瀏覽器中訪問摩泪。此模式會節(jié)省大量的系統(tǒng)資源,因為他能保證要請求的Activity對象在當前的棧中只存在一個劫谅。

總之见坑,在開發(fā)Android項目時,巧妙設(shè)置Activity的啟動模式會節(jié)省系統(tǒng)開銷和提高程序運行效率捏检。

【備注:】

android:screenOrientation="portrait"

android:configChanges="keyboardHidden|orientation|screenSize"

1荞驴、不設(shè)置Activity的android:configChanges時,切屏會重新調(diào)用各個生命周期贯城,切橫屏時會執(zhí)行一次熊楼,切豎屏時會執(zhí)行兩次

2、設(shè)置Activity的android:configChanges="orientation"時能犯,切屏還是會重新調(diào)用各個生命周期鲫骗,切橫、豎屏時只會執(zhí)行一次

3悲雳、設(shè)置Activity的android:configChanges="keyboardHidden"時挎峦,切屏還是會重新調(diào)用各個生命周期,切橫合瓢、豎屏時只會執(zhí)行一次

4坦胶、設(shè)置Activity的android:configChanges="orientation|screenSize|keyboardHidden"時,切屏不會重新調(diào)用各個生命周期,只會執(zhí)行onConfigurationChanged方法


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末顿苇,一起剝皮案震驚了整個濱河市峭咒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌纪岁,老刑警劉巖凑队,帶你破解...
    沈念sama閱讀 211,423評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異幔翰,居然都是意外死亡漩氨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,147評論 2 385
  • 文/潘曉璐 我一進店門遗增,熙熙樓的掌柜王于貴愁眉苦臉地迎上來叫惊,“玉大人,你說我怎么就攤上這事做修』粽” “怎么了?”我有些...
    開封第一講書人閱讀 157,019評論 0 348
  • 文/不壞的土叔 我叫張陵饰及,是天一觀的道長蔗坯。 經(jīng)常有香客問我,道長燎含,這世上最難降的妖魔是什么宾濒? 我笑而不...
    開封第一講書人閱讀 56,443評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮屏箍,結(jié)果婚禮上鼎兽,老公的妹妹穿的比我還像新娘。我一直安慰自己铣除,他們只是感情好谚咬,可當我...
    茶點故事閱讀 65,535評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著尚粘,像睡著了一般择卦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上郎嫁,一...
    開封第一講書人閱讀 49,798評論 1 290
  • 那天秉继,我揣著相機與錄音,去河邊找鬼泽铛。 笑死尚辑,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的盔腔。 我是一名探鬼主播杠茬,決...
    沈念sama閱讀 38,941評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼月褥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了瓢喉?” 一聲冷哼從身側(cè)響起宁赤,我...
    開封第一講書人閱讀 37,704評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎栓票,沒想到半個月后决左,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,152評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡走贪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,494評論 2 327
  • 正文 我和宋清朗相戀三年佛猛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坠狡。...
    茶點故事閱讀 38,629評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡挚躯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出擦秽,到底是詐尸還是另有隱情,我是刑警寧澤漩勤,帶...
    沈念sama閱讀 34,295評論 4 329
  • 正文 年R本政府宣布感挥,位于F島的核電站,受9級特大地震影響越败,放射性物質(zhì)發(fā)生泄漏触幼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,901評論 3 313
  • 文/蒙蒙 一究飞、第九天 我趴在偏房一處隱蔽的房頂上張望置谦。 院中可真熱鬧,春花似錦亿傅、人聲如沸媒峡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谅阿。三九已至,卻和暖如春酬滤,著一層夾襖步出監(jiān)牢的瞬間签餐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,978評論 1 266
  • 我被黑心中介騙來泰國打工盯串, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留氯檐,地道東北人。 一個月前我還...
    沈念sama閱讀 46,333評論 2 360
  • 正文 我出身青樓体捏,卻偏偏與公主長得像冠摄,于是被迫代替她去往敵國和親糯崎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,499評論 2 348

推薦閱讀更多精彩內(nèi)容