您的位置:首页 > 移动开发 > Android开发

Android应用如何退到首页/登录页

2016-08-17 19:34 344 查看
          打开某个互联网app , 界面层级是闪屏页(1秒后自动关闭)---登录页(登录成功后关闭)---首页Activity---Activity 1---Activity2--Activity3---Activity4,  这时Activity4是栈顶即正在显示的界面。 考虑如下问题:

问题1: 在其它手机上登录相同账号,  该app被踢下线要执行1、如何关闭所有历史Activity并打开登录页?

问题2: 假设Activity1/2/3被GC回收了, 点击back键如何恢复Activity3的数据(例如该界面通过id值从后台接口拿到详情数据,  如何传递id值?)?

问题3: 假设Activity3没被GC回收, 按back键后Activity3执行哪些生命周期?



问题1,   其实就是要关闭当前进程中的所有Activity,  即让Activity出栈。

解决方法一: 将首页的launchmode设置为singleTask, 在Activity4时启动MainActivity并在MainActivity的onNewIntent函数里判断flag后关闭自己并打开登录页。

Intent intent = new Intent(MainActivity.this, this);
intent.putExtra("closeType", 1);
startActivity(intent);

protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);

int statusType = intent.getIntExtra("closeType", 0);
if (statusType == 1){
//打开登录页
Intent intent1 = new Intent(this, LoginActivity.class);
startActivity(intent1);

finish();
}
}


解决方法二:   在每个Activity的onCreate、onDestroy函数里添加、删除activity引用到单例对象的列表里,   当需要关闭站内Activity时, 遍历list并调用Activity的finish方法。 PS:我觉得这种方式有点low, 网上有人描述关闭app进程时可以这样关闭activity。

问题2: 可以看我的另一篇博客http://blog.csdn.net/brycegao321/article/details/52057466 , 其实就是在onSaveInsanceState函数里保存参数到bundle里, 在onCreate方法里从bundle里拿出缓存的值, 例如id等。

问题3: onRestart---》onStart---》onResume, 在onResume函数里可以做刷新界面逻辑。

      我的微信公众号, 欢迎关注, 让我们一起成长


                         
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  singleTask