在系统里面有这样的广播接收者,它们出现的频率极高, 如果可以在清单文件里面注册广播接收者,那么就会造成一种后果,一旦广播到来,那么将会有一大批的应用随之启动。 如: 屏幕锁屏和点亮、电池电量变更.
那么这样一大批的应用启动,用户手机就很不流畅了.所以,如果想监听这些广播,就需要
使用代码注册
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本身内存就小,处理能力弱,所以必须强制你做这些事情