android_廣播者_只能用程式碼註冊(動態註冊)的廣播接收者_監聽螢幕的狀態
阿新 • • 發佈:2019-02-15
在系統裡面有這樣的廣播接收者,它們出現的頻率極高, 如果可以在清單檔案裡面註冊廣播接收者,那麼就會造成一種後果,一旦廣播到來,那麼將會有一大批的應用隨之啟動。 如: 螢幕鎖屏和點亮、電池電量變更.
那麼這樣一大批的應用啟動,使用者手機就很不流暢了.所以,如果想監聽這些廣播,就需要
使用程式碼註冊
public class MainActivity extends Activity {
private ScreenReceiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
receiver = new ScreenReceiver();
//到底要收什麼樣的廣播,得在這裡用程式碼過濾一下。
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
//註冊廣播接收者
registerReceiver(receiver, filter);
}
@Override
protected void onDestroy() {
super.onDestroy();
//當介面銷燬了之後,記得解除註冊廣播接收者
unregisterReceiver(receiver);
}
}
public class ScreenReceiver extends BroadcastReceiver {
private static final String TAG = "ScreenReceiver" ;
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_SCREEN_ON)){
Log.d(TAG, "螢幕點亮了。。。");
}else{
Log.d(TAG, "螢幕變暗了。。。");
}
}
}
注意:在清單檔案裡面設定監聽是沒有用的.必須使用程式碼註冊
<!--
這裡註冊沒用
<receiver android:name="com.itheima.screenstatus.ScreenReceiver">
<intent-filter >
<action android:name="android.intent.action.SCREEN_ON"/>
<action android:name="android.intent.action.SCREEN_OFF"/>
</intent-filter>
</receiver> -->
重要的一些概念
記憶體側漏什麼意思,什麼時候才會發生的
是記憶體洩漏, 通常是一些物件目前已經沒有任何用處了,但是仍然佔據著記憶體,程式設計師忘記釋放掉它了。一般有可能出現在我們的廣播註冊、解除註冊、資料庫的cursor關閉、資料庫DB關閉、 包括我們的IO流關閉等等。。
疑問:java不是會自動回收垃圾嗎?怎麼還發生記憶體的側漏?
首先GC(垃圾回收器),的出現的時間是不確定的,然後.Android本身記憶體就小,處理能力弱,所以必須強制你做這些事情