Android Tasks and Back Stack (一)

前几天遇到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.

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 很抱歉,作为AI语言模型,我无法提供具体的解决方案。但是,你可以尝试以下步骤来解决这个问题: 1. 确认你的Android Studio版本是否最新,如果不是,请升级到最新版本。 2. 检查你的项目配置是否正确,包括Gradle版本、SDK版本等。 3. 尝试清除项目缓存,重新构建项目。 4. 如果以上步骤都无法解决问题,可以尝试在Stack Overflow等技术社区上寻求帮助,或者联系Android Studio官方支持团队。 ### 回答2: Android Studio是一款开发Android应用程序的集成开发环境(IDE),它提供了许多功能和工具来方便开发人员进行应用程序的开发和调试。运行任务(Run Tasks)是其中一个重要的功能,可以在开发过程中快速编译和运行应用程序。 在Android Studio中,运行任务可能会失败的原因有很多,我将列举一些常见的情况和解决方法: 1. 编译错误:如果在项目中存在语法错误或其他编译错误,运行任务会失败。可以在Android Studio的Build窗口中查看详细的错误信息,并修复相应的错误。 2. 设备连接问题:如果您的Android设备没有正确连接到计算机,运行任务也会失败。请确保设备已启用调试模式,并对设备进行重新连接。 3. Build工具版本不兼容:Android Studio需要与项目中使用的Build工具版本兼容。可以在项目的build.gradle文件中检查并更新Build工具版本,以确保其与Android Studio兼容。 4. 运行配置错误:在运行任务之前,需要正确配置运行选项。请确保已选择正确的模拟器或连接的Android设备,并选择正确的运行配置。 5. Gradle同步问题:Gradle是一种自动化构建工具,用于管理和构建Android应用程序。如果Gradle同步出现问题,可能会导致运行任务失败。可以尝试点击Android Studio的Sync按钮,强制同步Gradle文件。 如果以上方法都无法解决问题,可以尝试重启Android Studio、清除缓存或重新导入项目。 总之,Android Studio运行任务失败可能是由编译错误、设备连接问题、Build工具版本不兼容、运行配置错误或Gradle同步问题等原因引起的。根据具体情况,可以尝试上述方法来解决该问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值