- 自己开发Launcher,一直是预制应用,直接点击Launcher 上的Icon,没发现问题。
- 如果install 应用的话,问题就会出现。
首先被启动的应用首页不能设置 android:launchMode=“singleTask”,如果设置了则每次打开的是首页
打开应用的方式是:
public void startActiv(String pkg,String cls){
ComponentName componet = new ComponentName(pkg, cls);
Intent intent = new Intent();
intent.setComponent(componet);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK );
startActivity(intent);
}
出现的问题:
install 上应用后,从MainActivity -->startActivity -->SeconActivity 页面
然后Home键,再次点击Launcher上的 Icon 进入此应用,进入后发现不是在SecondActivity 页面,而又是在MainActivity 页面上,打log看,home键退出后,重新进入,都会走onCreate 函数。
使用banck键退出后,第二次进入,就好了,不会重新创建应用了。
解决办法:
1.如果是自己开发的app,可以在应用里面添加:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//添加
if (!isTaskRoot()) {
finish();
return;
}
setContentView(R.layout.activity_main);
- 如果你是要启动第三方应用,则使用此方法即可:
/**
* 启动第三方apk
*
* 如果已经启动apk,则直接将apk从后台调到前台运行(类似home键之后再点击apk图标启动),如果未启动apk,则重新启动
*/
public void OpenIntentByPackageName( String packageName, String mainAct){
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED|Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setComponent(new ComponentName(packageName, mainAct));
startActivity(intent);
}
或者
/**
* 启动第三方apk
*
* 如果已经启动apk,则直接将apk从后台调到前台运行(类似home键之后再点击apk图标启动),如果未启动apk,则重新启动
*/
public static void startActivityForApp() {
Intent intent = getAppOpenIntent(ContextHolder.getContext(), PACKAGENAME_KEMOBILEVIDEO);
ContextHolder.getContext().startActivity(intent);
}
public static Intent getAppOpenIntent(Context context, String packageName) {
String mainAct = null;
PackageManager pkgMag = context.getPackageManager();
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | Intent.FLAG_ACTIVITY_NEW_TASK);
@SuppressLint("WrongConstant") List<ResolveInfo> list = pkgMag.queryIntentActivities(intent,
PackageManager.GET_ACTIVITIES);
for (int i = 0; i < list.size(); i++) {
ResolveInfo info = list.get(i);
if (info.activityInfo.packageName.equals(packageName)) {
mainAct = info.activityInfo.name;
break;
}
}
if (TextUtils.isEmpty(mainAct)) {
return null;
}
intent.setComponent(new ComponentName(packageName, mainAct));
return intent;
}