最近的一个需求,需要判断是否是第一次启动应用,百度之后大多是使用SharedPreferences去实现,即去读取一个自定义的值,第一次自然是取不到的,然后给他赋值,之后启动再次读取该值自然可以读到,即“非第一次启动”。但是这样并没有用,因为SharedPreferences的值会一直储存在内存里,即时我尝试了在Activity的onDestroy里加入clear SharedPreferences的代码,关机再次开机依然可以拿到数据。
有其他结合versionCode的方式也不适用,因为并不是升级的场景。
例如:https://blog.csdn.net/wusj3/article/details/78496724
最后使用了公司封装的实现,即使用黏性广播判断。具体使用很简单,如普通的Broadcast类似,但StickyBroadcast会在发出后一直滞留,直到有地方注册广播后才会收到。关机之后广播自然会销毁掉。
StickyBroadcast的博客:https://blog.csdn.net/woaieillen/article/details/7376391
具体实现:
public static void set(String key, String val) {
Intent intent = this.registerReceiver(null, new IntentFilter(ACTION));//自定义的ACTION
if (intent == null)
intent = new Intent(ACTION);
intent.putExtra(key, val);
ctx.sendStickyBroadcast(intent);
}
public static String get(String key) {
Intent intent = this.registerReceiver(null, new IntentFilter(ACTION));
if (intent != null)
return intent.getStringExtra(key);
return null;
}
注意需要加入权限 android.permission.BROADCAST_STICKY,并不要存储太块的数据。