从小部件启动活动是否会启动新任务?

时间:2017-08-10 19:32:19

标签: android

例如,如果我启动我的应用程序并启动活动Main然后从主屏幕小部件启动另一个Main实例,那么这两个Main实例在同一任务中不是吗?

我问的原因是因为这个意图在从窗口小部件启动活动时没有清除活动堆栈

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);

1 个答案:

答案 0 :(得分:-1)

我建议使用manifest.xml文件使用单实例模式。

<activity android:launchMode= "singleInstance" />

或尝试启动您当前的活动:

 @SuppressLint("NewApi")
    @SuppressWarnings("deprecation")
    public Intent launchIntent(Context ctx) {
        final ActivityManager am = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE);
        Intent intent = new Intent();
        boolean activated = false;
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            List<ActivityManager.AppTask> tasks = am.getAppTasks();
            for (ActivityManager.AppTask task: tasks){
                intent = task.getTaskInfo().baseIntent;
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                activated = true;
                break;
            }
        } else {
            final List<ActivityManager.RecentTaskInfo> recentTaskInfos = am.getRecentTasks(1024,0);
            String myPkgNm = ctx.getPackageName();
            if (!recentTaskInfos.isEmpty()) {
                ActivityManager.RecentTaskInfo recentTaskInfo;
                final int size = recentTaskInfos.size();
                for (int i = 0; i < size; i++) {
                    recentTaskInfo = recentTaskInfos.get(i);
                    if (recentTaskInfo.baseIntent.getComponent().getPackageName().equals(myPkgNm)) {
                        intent = recentTaskInfo.baseIntent;
                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        activated = true;
                    }
                }
            }
        }
        if (!activated) {
            intent = new Intent(this, ABase.class);
        }
        return intent;
    }