Activity,Android中的四大組件之一,任何一個應用必須包含一個或以上的Activity,它是所有功能的載體,是用戶看得見摸得着的,權重毋庸置疑,也是面試中常見的基礎面試之一,對於它的生命週期的軌跡,相信大家並不陌生,比如,創建一個Activity,銷燬一個Activity,跳轉到新的Activity,點擊Home建或電源鍵等等,常見的我們都知道,那麼,在當前Activity,下拉通知欄呢?會走哪些生命週期呢?
我們可以猜測一下,會走哪個生命週期?onPause?onStop?還是其它的,不妨我們組個測試?把幾個常見的生命週期方法寫出來,打印一下,如下:
public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(TAG, "onCreate");
}
@Override
protected void onStart() {
super.onStart();
Log.i(TAG, "onStart");
}
@Override
protected void onStop() {
super.onStop();
Log.i(TAG, "onStop");
}
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "onResume");
}
@Override
protected void onPause() {
super.onPause();
Log.i(TAG, "onPause");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG, "onDestroy");
}
}
當運行後,下拉通知欄,可以發現,以上寫的生命週期方法一個也沒走,那麼我們就可以做一個總結:當前Activity中,下拉通知欄,是不走任何生命週期的。
那麼問題來了,問題有二:
1、爲什麼不走生命週期呢?
2、既然不走生命週期方法,開發中怎麼監聽到用戶下拉通知欄呢?
針對第一個問題,我們來具體的來想一想,能引起Activity的生命週期的變化,需要什麼條件?創建一個Activity,銷燬一個Activity,隱藏一個Activity,跳轉一個Activity等都可以,是不是發現,必須得有一個Activity參與,才能引起生命週期的變化,系統的通知欄是一個Activity嗎?顯然不是,它是一個用於通知的窗口,所以,既然不是Activity,當然也就不走任何生命週期了。
第二個問題,我們可以通過重寫onWindowFocusChanged這個方法來監聽通知欄的下拉,false爲下拉。