在Activity的生命週期涉及到七大方法,分別是:php
屏幕旋轉時生命週期java
第一種狀況:當前的Activity不銷燬【設置Activity的android:configChanges="orientation|keyboardHidden|screenSize"時,切屏不會從新調用各個生命週期,只會執行onConfigurationChanged方法】android
<activity android:name=".activity.VideoDetailActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:screenOrientation="portrait"/>
//重寫旋轉時方法,不銷燬activity @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); }
異常條件會調用什麼方法c++
何時會引發異常生命週期git
後臺的Activity被系統回收怎麼辦?程序員
說一下onSaveInstanceState()和onRestoreInstanceState()方法特色?github
Activity的 onSaveInstanceState()和onRestoreInstanceState()並非生命週期方法,它們不一樣於onCreate()、onPause()等生命週期方法,它們並不必定會被觸發。面試
//保存數據 @Override protected void onSaveInstanceState(Bundle outBundle) { super.onSaveInstanceState(outBundle); outBundle.putBoolean("Change", mChange); } //取出數據 @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); mChange = savedInstanceState.getBoolean("Change"); } //或者在onCreate方法取數據也能夠 //onCreate()方法其實也有一個Bundle類型的參數。這個參數在通常狀況下都是null, //可是當活動被系統回收以前有經過 onSaveInstanceState()方法來保存數據的話,這個參就會帶有以前所保存的所有數據 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState != null) { String data = savedInstanceState.getString("data"); } }
何時會觸發走這兩個方法?算法
onSaveInstanceState()被執行的場景有哪些?數據庫
系統不知道你按下HOME後要運行多少其餘的程序,天然也不知道activityA是否會被銷燬,所以系統都會調用onSaveInstanceState(),讓用戶有機會保存某些非永久性的數據。如下幾種狀況的分析都遵循該原則當用戶按下HOME鍵時
如何避免配置改變時Activity重建
優先級低的Activity在內存不足被回收後怎樣作能夠恢復到銷燬前狀態
如何判斷activity的優先級?技術博客大總結
app切換到後臺,當前activity會走onDestory方法嗎?
通常在onstop方法裏作什麼?
什麼狀況會致使app會被殺死,這時候會走onDestory嗎?
activity被回收如何恢復
Activity的啓動過程是怎樣的,有幾種方式?
從桌面launcher上點擊應用圖標會幹啥,調用startActivty()又會作什麼?
Activity的四種啓動模式
singleTop和singleTask的區別以及應用場景
singleTop或singleTask的Activity在如下狀況會回調onNewIntent()
任務棧的做用是什麼?技術博客大總結
兩個Activity之間怎麼傳遞數據?
把數據封裝至intent對象中
Intent intent = new Intent(content, MeActivity.class); intent.putExtra("goods_id", goods_id); content.startActivity(intent);
把bundle對象封裝至intent對象中
Bundle bundle = new Bundle(); bundle.putString("malename", "李志"); intent.putExtras(bundle); startActivity(intent);
intent和bundle有什麼區別?
Intent傳遞數據和Bundle傳遞數據是一回事,Intent傳遞時內部仍是調用了Bundle。
public @NonNull Intent putExtra(String name, String value) { if (mExtras == null) { mExtras = new Bundle(); } mExtras.putString(name, value); return this; }
爲何有了intent還要設計bundle?
二者比較
bundle使用場景
public static void showFragmentDialog(String title, String content, boolean is_open, AppCompatActivity activity) { ServiceDialogFragment mainDialogFragment = new ServiceDialogFragment(); Bundle bundle = new Bundle(); bundle.putString("title", title); bundle.putString("content", content); bundle.putBoolean("is_open",is_open); mainDialogFragment.setArguments(bundle); mainDialogFragment.show(activity.getSupportFragmentManager()); } @Override public void onCreate(Bundle savedInstanceState) { setLocal(Local.CENTER); super.onCreate(savedInstanceState); Bundle bundle = getArguments(); if (bundle != null) { title = bundle.getString("title"); content = bundle.getString("content"); is_open = bundle.getBoolean("is_open"); } }
常見的標記爲:
同一程序不一樣的Activity是否能夠放在不一樣的Task任務棧中?
Service分爲兩種
對應的生命週期以下:
注意
Service生命週期解釋技術博客大總結
service如何殺不死?
關於service中onDestroy()何時會被執行?
一個Activty先start一個Service後,再bind時會回調什麼方法?
先start後bind操做service,此時如何作才能回調Service的destory()方法?
是否能在Service進行耗時操做?
若是非要能夠怎麼作,如何避免service線程卡頓?
service裏面能夠彈土司嗎?
條件是,service裏面彈toast須要添加到主線程裏執行。
@Override public void onCreate(){ handler = new Handler(Looper.getMainLooper()); System.out.println("service started"); handler.post(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(), "Test",Toast.LENGTH_SHORT).show(); } }); }
Activity如何與Service通訊?
方法一:
方法二
Android中哪些事件須要用到廣播?
廣播的生命週期是怎樣的?
廣播有幾種形式
廣播的兩種註冊形式技術博客大總結
動態註冊
須要使用廣播接收者時,執行註冊的代碼,不須要時,執行解除註冊的代碼。安卓中有一些廣播接收者,必須使用代碼註冊,清單文件註冊是無效的。
public class MainActivity extends Activity { private IntentFilter intentFilter; private NetworkChangeReceiver networkChangeReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intentFilter = new IntentFilter(); intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); networkChangeReceiver = new NetworkChangeReceiver(); registerReceiver(networkChangeReceiver, intentFilter); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(networkChangeReceiver); } class NetworkChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "network changes",Toast.LENGTH_SHORT).show(); } } }
靜態註冊
Fragment與Activity之間是如何傳值的?
1.Activity向Fragment傳值:
2.Fragment向Activity傳值:
第一種:
第二種:
Fragment與Fragment之間是如何傳值的?
第一種:
第二種:
第三種:
Activity建立Fragment的方式是什麼?
靜態建立具體步驟
動態建立具體步驟
FragmentPageAdapter和FragmentPageStateAdapter的區別?
fragment 特色
Fragment從建立到銷燬整個生命週期中涉及到的方法依次爲:
onAttach()->onCreate()->onCreateView()->onActivityCreated()->onStart()->onResume()->onPause()->onStop()->onDestroyView()->onDestroy()->onDetach(),其中和Activity有很多名稱相同做用類似的方法,而不一樣的方法有:
如何解決getActivity爲null的異常問題技術博客大總結
@Override public void onAttach(Context context) { super.onAttach(context); activity = (PhoneNumActivity) context; } @Override public void onDetach() { super.onDetach(); activity = null; }
getActivity()空指針:
Fragment視圖重疊:
@Override protected void onCreate(@Nullable Bundle savedInstanceState) { // 在頁面重啓時,Fragment會被保存恢復,而此時再加載Fragment會重複加載,致使重疊 ; if(saveInstanceState == null){ // 或者 if(findFragmentByTag(mFragmentTag) == null) // 正常狀況下去 加載根Fragment } }
爲何fragment傳遞數據不用構造方法傳遞?
FragmentManager , add 和 replace 有什麼區別?
Activitiy啓動流程中performLaunchActivity的做用?
Activity啓動流程中handleResumeActivity的做用?
什麼時候將DecorView設置爲VISIBLE?而且顯示出來?技術博客大總結
Intent是一種運行時綁定(run-time binding)機制,它能在程序運行過程當中鏈接兩個不一樣的組件。
Intent能夠傳遞的數據基本數據類型的數據,數組,還有集合,還有序列化的對象
Android中序列化對象方式:技術博客大總結
能夠經過bindService的方式,先在Activity裏實現一個ServiceConnection接口,並將該接口傳遞給bindService()方法,在ServiceConnection接口的onServiceConnected()方法 裏執行相關操做。 Service的生命週期與啓動方法由什麼區別? startService():開啓Service,調用者退出後Service仍然存在。 bindService():開啓Service,調用者退出後Service也隨即退出。 Service生命週期: 只是用startService()啓動服務:onCreate() -> onStartCommand() -> onDestory 只是用bindService()綁定服務:onCreate() -> onBind() -> onUnBind() -> onDestory 同時使用startService()啓動服務與bindService()綁定服務:onCreate() -> onStartCommnad() -> onBind() -> onUnBind() -> onDestory
廣播有哪些註冊方式?
廣播發送和接收原理是什麼[binder如何運做的]?
Context是什麼?
Context有哪些類型,分別做用是什麼?
Context下有哪些子類,主要是幹什麼的?
ActivityThread的main()的流程大概是怎麼樣的?
序列化的方式有哪些
Parcelable
Serializable
界面的刷新爲何需16.6ms?
畫面的顯示須要哪些步驟?
界面保持不變時還會16.6ms刷新一次屏幕嗎?技術博客大總結
界面刷新的本質流程
Android中日誌級別有哪幾種?
解釋: