1. 程式人生 > >android_廣播者_只能用程式碼註冊(動態註冊)的廣播接收者_監聽螢幕的狀態

android_廣播者_只能用程式碼註冊(動態註冊)的廣播接收者_監聽螢幕的狀態

在系統裡面有這樣的廣播接收者,它們出現的頻率極高, 如果可以在清單檔案裡面註冊廣播接收者,那麼就會造成一種後果,一旦廣播到來,那麼將會有一大批的應用隨之啟動。 如: 螢幕鎖屏和點亮、電池電量變更.
那麼這樣一大批的應用啟動,使用者手機就很不流暢了.所以,如果想監聽這些廣播,就需要
使用程式碼註冊

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本身記憶體就小,處理能力弱,所以必須強制你做這些事情