Android Tasks and Back Stack (一)

没有检索到摘要

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前几天遇到LogOut一次性不成功的问题!最后发现问题在!从第二个activity回到前面的activity时,使用了 StartActivity(new Intent(...)),这种方式默认是新创建已Activity实例,加入到栈顶,就会导致 有重复的activty,所以要退两次 才能成功。比如我一个应用程序myApp,4个activity: LoginActivitty(登录界面),HomeActivity(主界面),NoticeListActivity(公告列表界面),NoticeDetailActivity(公告详情界面),流程如下

 

在login界面登录时使用:

startActivity(new Intent(LoginActivity.this, HomeActivity.class));

Task stack:

  |                        |

  |LoginActivity    |

  -------------------

 

 

在Home界面进公告列表示时使用:

startActivity(new Intent(HomeActivity.this, NoticeListActivity.class));

Task stack:

  |HomeActivity   |

  |LoginActivity    |

  -------------------

 

 

在列表界面进详情时使用:

startActivity(new Intent(NoticeListActivity.this, NoticeDetailActivity.class));

Task stack:

  |NoticeListActivity |

  |HomeActivity       |

  |LoginActivity        |

  ------------------------

 

在列表详情时:

startActivity(new Intent(NoticeListActivity.this, NoticeDetailActivity.class));

Task stack:

  |NoticeDetailActivity |

  |NoticeListActivity     |

  |HomeActivity           |

  |LoginActivity           |

  ------------------------

 

 而这时如果我想当用户点击HomeButton(自定义) 按钮时要回到HomeActivity, 如果还是用:startActivity(new Intent(NoticeDetailActivity.this, HomeActivity.class));大家都知道出现如下效果,即两个

HomeActivity,在堆栈中:

  |HomeActivity           |

  |NoticeDetailActivity |

  |NoticeListActivity     |

  |HomeActivity           |

  |LoginActivity           |

  ------------------------

这个时候用户单击系统自带Back按钮时 就会出现两次HomeActivity,虽然按正常来说是没什么的,因为我只是想返回到上一个点击的界面。但是有的时候是 当我在HomeActivity中时,点击back 按钮必须跳转到Login界面(即logOut).那么就有问题了!当然你也可以再启动LoignActivity,并且清空当前Task 堆栈。

但是我想说的 有简单的方式,   

       <!-- 主界面 -->
        <activity android:name=".activity.HomeActivity"
            android:windowSoftInputMode="adjustPan" android:screenOrientation="portrait"
            android:launchMode="singleTask"
            >

使用android:launchMode="singleTask",即启动模式使用“singleTask”,即同时只有一个实例存在于手机中,当这个实例已经存在了,就不会新创建实例,而调用该实例的 onNewIntent(),并显示,并且会清空他上面的历史堆栈记录,

如当用户点击HomeButton(自定义) 按钮时要回到HomeActivity, 还是用:startActivity(new Intent(NoticeDetailActivity.this, HomeActivity.class));但是这时我们设置了android:launchMode="singleTask" 在manifest.xml中,

那么这个时候Task堆栈就变成了

  |HomeActivity           |

  |LoginActivity           |

  ------------------------          

而不是

  |HomeActivity           |

  |NoticeDetailActivity |

  |NoticeListActivity     |

  |HomeActivity           |

  |LoginActivity           |

  ------------------------    这个时候你在HomeActivity 中点击系统的back 键时就能保证,每次都会到loginActivity。

 

我今天测试发现一个问题,android:launchMode="singleTask"并不是新创建一个新Task ,而还是加入到原来的Task 堆栈中,但是android:launchMode="singleInstance"会创建一个新Task ,里面有且只有该activity.

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值