安卓开发当中,难免会用到BroadcastReceiver来接收广播,然后运行某些功能,例如启动主程序,但某些情况下,会发现你可能重复创建调用了MainActivity,例如如果你在MainActivity里面的onCreate里面创建定时器,那么可能你的定时器会重复多个!
例如下面的代码:
public class PackageBroadcast extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
String localPkgName = context.getPackageName();//取得MyReceiver所在的App的包名
Uri data = intent.getData();
String installedPkgName = data.getSchemeSpecificPart();//取得安装的Apk的包名,只在该app覆盖安装后自启动
if ((action.equals(Intent.ACTION_PACKAGE_ADDED)
|| action.equals(Intent.ACTION_PACKAGE_REPLACED)) && installedPkgName.equals(localPkgName)) {
Intent launchIntent = new Intent(context, MainActivity.class);
launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(launchIntent);
}
}
}
会在调试的时候,你在MainActivity的onCreate方法中下断点,你会发现中断两次!
原因是MainActivity可能创建和运行多次,解决办法:
方法一:
在AndroidManifest.xml中,把Activity改用单例模式:
<activity android:name=".MainActivity" android:launchMode="singleTask">
方法二:
在BroadcastReceiver 中,利用代码判断是否已经存在对应的Activity。