赞
踩
我们的welcome 页面是singleTask 的。启动之后,到主页面,home 键之后,是可以回到正常的主页面。
是因为:我们welcome 页面启动之后就销毁了,从堆栈消失了。然后我点击桌面,虽然启动的是welcome,但是我在onCreate 里面,判断了从哪里来的,如果是的话,就finish welcome。根本不影响原来的堆栈。
但是如果不finish 原来的activity ,那么点击桌面肯定会把之前的页面全部从堆栈清除掉。就会出现,点击回去之后,用户的状态全没有了。你在onNewIntent 里面写东西也白搭,因为已经把之前的activity 清除了。
相关的finish 的代码是:
if(getIntent() != null && (getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0 && initLauncherFlag(getIntent())){
finish();
}
后来我调研的时候,出现了一个问题,当时我没有看log,不知道进程死了,我还以为没有跳转。log 如下:
Process: com.ireader.plug.sdk, PID: 5301
android.util.SuperNotCalledException: Activity {com.ireader.plug.sdk/com.ireader.plug.sdk.activity.MainActivity} did not call through to super.onCreate()
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2568)
原因是:
@Override
protected void onCreate(Bundle savedInstanceState) {
if(getIntent() != null && (getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0 && initLauncherFlag(getIntent())){
finish();
return;
}
super.onCreate(savedInstanceState);
}
我这里没有执行super.onCreate(savedInstanceState);需要改一下,不管怎么样,都要执行super.onCreate(savedInstanceState);,不然的话你的进程直接就挂了。
改完之后:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(getIntent() != null && (getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0 && initLauncherFlag(getIntent())){
finish();
}
}
if(getIntent() != null && (getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0 && initLauncherFlag(getIntent())){
finish();
}
上面这个判断在有些手机上是有问题的,比如vivoX9, 主要是他们自己的桌面有自己的修改,Intent 里面的flag 修改了。
我们看下有问题的手机的flag: Integer.toHexString(getIntent().getFlags()) 是 0x10200000
而我们在onCreate 里面的判断是这个flag:
public static final int FLAG_ACTIVITY_BROUGHT_TO_FRONT = 0x00400000;
然后0x10200000 & 0x00400000 肯定不是0.
/**
* If set, when sending a broadcast the recipient is allowed to run at
* foreground priority, with a shorter timeout interval. During normal
* broadcasts the receivers are not automatically hoisted out of the
* background priority class.
*/
public static final int FLAG_RECEIVER_FOREGROUND = 0x10000000;
1.断点调试
2.没思路了要查看logCat
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。