我最近添加了我的应用程序的功能,以检查我们本地服务器上的更新(此应用程序未在Google Play商店中发布。它将在内部使用,并且没有互联网连接将被使用。不要问。这是怎么回事:))。我通过检查SQL Server中的某个表来跟踪更新,如果我的应用程序的版本低于此表中指示的版本,我从内部网站(仅限LAN)下载新的APK,然后安装APK。我还在设备中有另一个应用程序侦听PACKAGE_ADDED广播。我可以成功捕获广播。
问题是,安装后,广播接收器通过调用以下内容启动应用程序。
public class PackageInstalledBroadcastReceiver extends BroadcastReceiver {
private final String MY_PACKAGE_NAME = "com.company.packagename";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_PACKAGE_ADDED)) {
String packageName = intent.getData().getSchemeSpecificPart();
if (packageName.equalsIgnoreCase(MY_PACKAGE_NAME)) {
Intent i = new Intent();
i.setClassName(MY_PACKAGE_NAME, MY_PACKAGE_NAME + ".LoginActivity");
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
}
}
但是应用程序启动需要很长时间。用户可能认为没有发生任何事情,因此他/她可以通过单击应用程序的图标手动启动应用程序。如果用户点击了应用的图标,该应用会立即启动。过了一会儿,广播接收器启动的活动也被打开了。所以现在,我最终在同一个活动中使用了我的应用程序的两个实例(LoginActivity)。我可以说是这种情况,因为如果我从LoginActivity按下设备上的Back键,我仍然会在另一个LoginActivity中结束,如果我再次按Back键,我最终会进入设备的桌面
答案 0 :(得分:0)
你的问题有两个问题:
首先,为什么BroadcastReceiver
需要很长时间才能开始您的活动。
没有足够的信息来烘烤它。
您希望活动的第二个实例只有一个。
Android提供了一种方法:
androidmanifest
档案android:launchMode = "singleInstance"
P / s:如果你能提供更多关于你拳头问题的信息。请创建一个新问题。希望你解决它。