关于页面跳转不重新创建activity的问题

lanzheking 2015-03-03 11:35:18
场景是这样
A 跳转到 B , B再跳回A ,为了不让A Activity重新创建 做法时 launcherMode singleInstance 或 singleTask。
但这回引发另一个问题, 进入B Activity 后, Home缩小 再点击图标, 程序回到了 A Activity 。 网上铺垫该店说法时去掉 singleInstance 或 singleTask 。 所以前后不是, 该怎么办。
...全文
537 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgzhg0 2015-03-05
  • 打赏
  • 举报
回复
淘宝html5做的
  • 打赏
  • 举报
回复
把你们的全看了下,我提一下我的意见。 因为google官方推荐使用fragment,所以好多应用都从Activity拆换成fragment了。经历了N多的弯路之后,我发现fragment其实是比较占内存的,activity会有自动回收内存的机制,android没有对fragment内存进行回收的机制,我们可以手动将fragment销毁,其实并没有将他的内存释放,只有fragment所依赖的activity销毁了,它才会释放内存。 所以好多应用都是fragment和activity交互使用的。(前提) 问题: 1.你的首A页可以用activity做,里面有几个选项卡,就嵌套几个fragment,这是最下面的层级(fragment的切换速度比较快,用户体验比较好)Fragment 都是在show之前拿数据的,而activity都是在show出来再拿数据的(大部分) 2.如果你的界面B,如果数据承载量比较大,界面比较复杂,各种乱七八糟的东西都有的话,就在做成activity,在里面拿数据 3.这样的话,你在首页A里面的任何fragment点击进入界面B,在界面B按返回按钮(finish B),都可以显示界面A, 4.至于消息的传递机制,有好多种解决方法(handle,otto...) 5.这样的话,你不管在界面A,还在是界面B,(甚至B里面还有界面C),按home键后,在点击应用图标,都是你退出之前的界面 观察了下手机淘宝,也是这样的。首页Activity A,嵌套了5个fragment(a1, a2, a3, a4, a5),在a2里面点击一个店铺,打开Activity B,再在B里面点击一条信息,打开Activity C(或者Fragment C 由你看界面内容决定),不管你在哪个界面按home键,在点击应用图标,进入的还是之前的那个界面(至于是否要刷新数据,由你自己决定)。再者它的返回键和上面的返回键头,都是回到上个界面,(至于是否销毁本次界面,自己斟酌),它会有一个回到首页的东西,你点击之后,回到首页(就是你显示A,并且让a1显示而已) (个人意见而已,还是新手,在摸索阶段而已)
HXW666 2015-03-04
  • 打赏
  • 举报
回复
能否使用onSaveInstanceState()方法?或者重写activity父类的onpause和onstop,保存数据。不知道我没有理解错lz的意思,我是初学者一个。
lanzheking 2015-03-03
  • 打赏
  • 举报
回复
引用 1 楼 bdmh 的回复:
你直接back就行了,为啥要创建一个A呢
那如果时 A -> B -> C -> D -> A 呢 其实就类似淘宝顶部回首页的效果。
lanzheking 2015-03-03
  • 打赏
  • 举报
回复
那如果时 A -> B -> C -> D -> A 呢 其实就类似淘宝顶部回首页的效果。
bdmh 2015-03-03
  • 打赏
  • 举报
回复
你直接back就行了,为啥要创建一个A呢
开发者_android 2015-03-03
  • 打赏
  • 举报
回复
引用 17 楼 lanzheking 的回复:
[quote=引用 16 楼 dalor 的回复:] [quote=引用 15 楼 lanzheking 的回复:] [quote=引用 13 楼 dalor 的回复:] [quote=引用 12 楼 lanzheking 的回复:] [quote=引用 11 楼 dalor 的回复:] 1.我想到的就是使用singleInstance 或 singleTask来解决。 2.Home键缩小应用再点击图标保留在之前的activity,你是不想要这种效果?
1 singleInstance 和 singleTask 确实可以解决, 2 正如你所说,保留最上 也就时Home前的那个activity , 网上找到的解决方法,都是说去掉singleInstance 和 singleTask,我蛋碎一地。[/quote] 第2个问题,我现在做一个项目,用的是singleTop,当切换到后台后,点击图标,还是切换之前的页面。[/quote] singleTop 和 standard home以后图标会留在之前activity , singleInstance和singleTask Home以后图标会 回到第一个activity。 你说的没错。 但我singleTop 进入几个activity 在直接跳回主页 , 主页就 onCreate 了。 当然主页可以做缓存, 重新onCreate后读缓存 在广播或别的形式 finish之前就主页。 但我想这不是最佳方案。 最好能直接跳回之前的主页activity , 淘宝看似做到了 , 头痛啊~。[/quote]
引用 15 楼 lanzheking 的回复:
[quote=引用 13 楼 dalor 的回复:] [quote=引用 12 楼 lanzheking 的回复:] [quote=引用 11 楼 dalor 的回复:] 1.我想到的就是使用singleInstance 或 singleTask来解决。 2.Home键缩小应用再点击图标保留在之前的activity,你是不想要这种效果?
1 singleInstance 和 singleTask 确实可以解决, 2 正如你所说,保留最上 也就时Home前的那个activity , 网上找到的解决方法,都是说去掉singleInstance 和 singleTask,我蛋碎一地。[/quote] 第2个问题,我现在做一个项目,用的是singleTop,当切换到后台后,点击图标,还是切换之前的页面。[/quote] singleTop 和 standard home以后图标会留在之前activity , singleInstance和singleTask Home以后图标会 回到第一个activity。 你说的没错。 但我singleTop 进入几个activity 在直接跳回主页 , 主页就 onCreate 了。 当然主页可以做缓存, 重新onCreate后读缓存 在广播或别的形式 finish之前就主页。 但我想这不是最佳方案。 最好能直接跳回之前的主页activity , 淘宝看似做到了 , 头痛啊~。[/quote] 淘宝,看起来好像用的是缓存。。。。。 这样,主页设置为singleTask,会产生什么问题?当在主页时,按home,再点击应用图标,会重新创建。。。[/quote] 哦噢~, 我验证了一下 , 好像淘宝还真实也重新创建了, 只是他们主页记录了滚动的位置, 然后回到首页自动滚动到之前的位置, 看起来没创建 , 但是这时切换别的标签页, 发现都是要重新loading的, 那应该是重新创建了 , 否则不许要重新loading。 看来此题无解, 只能乖乖走缓存了。 谢谢回复啊。[/quote] 也算是有个结果了。
lanzheking 2015-03-03
  • 打赏
  • 举报
回复
引用 16 楼 dalor 的回复:
[quote=引用 15 楼 lanzheking 的回复:] [quote=引用 13 楼 dalor 的回复:] [quote=引用 12 楼 lanzheking 的回复:] [quote=引用 11 楼 dalor 的回复:] 1.我想到的就是使用singleInstance 或 singleTask来解决。 2.Home键缩小应用再点击图标保留在之前的activity,你是不想要这种效果?
1 singleInstance 和 singleTask 确实可以解决, 2 正如你所说,保留最上 也就时Home前的那个activity , 网上找到的解决方法,都是说去掉singleInstance 和 singleTask,我蛋碎一地。[/quote] 第2个问题,我现在做一个项目,用的是singleTop,当切换到后台后,点击图标,还是切换之前的页面。[/quote] singleTop 和 standard home以后图标会留在之前activity , singleInstance和singleTask Home以后图标会 回到第一个activity。 你说的没错。 但我singleTop 进入几个activity 在直接跳回主页 , 主页就 onCreate 了。 当然主页可以做缓存, 重新onCreate后读缓存 在广播或别的形式 finish之前就主页。 但我想这不是最佳方案。 最好能直接跳回之前的主页activity , 淘宝看似做到了 , 头痛啊~。[/quote]
引用 15 楼 lanzheking 的回复:
[quote=引用 13 楼 dalor 的回复:] [quote=引用 12 楼 lanzheking 的回复:] [quote=引用 11 楼 dalor 的回复:] 1.我想到的就是使用singleInstance 或 singleTask来解决。 2.Home键缩小应用再点击图标保留在之前的activity,你是不想要这种效果?
1 singleInstance 和 singleTask 确实可以解决, 2 正如你所说,保留最上 也就时Home前的那个activity , 网上找到的解决方法,都是说去掉singleInstance 和 singleTask,我蛋碎一地。[/quote] 第2个问题,我现在做一个项目,用的是singleTop,当切换到后台后,点击图标,还是切换之前的页面。[/quote] singleTop 和 standard home以后图标会留在之前activity , singleInstance和singleTask Home以后图标会 回到第一个activity。 你说的没错。 但我singleTop 进入几个activity 在直接跳回主页 , 主页就 onCreate 了。 当然主页可以做缓存, 重新onCreate后读缓存 在广播或别的形式 finish之前就主页。 但我想这不是最佳方案。 最好能直接跳回之前的主页activity , 淘宝看似做到了 , 头痛啊~。[/quote] 淘宝,看起来好像用的是缓存。。。。。 这样,主页设置为singleTask,会产生什么问题?当在主页时,按home,再点击应用图标,会重新创建。。。[/quote] 哦噢~, 我验证了一下 , 好像淘宝还真实也重新创建了, 只是他们主页记录了滚动的位置, 然后回到首页自动滚动到之前的位置, 看起来没创建 , 但是这时切换别的标签页, 发现都是要重新loading的, 那应该是重新创建了 , 否则不许要重新loading。 看来此题无解, 只能乖乖走缓存了。 谢谢回复啊。
开发者_android 2015-03-03
  • 打赏
  • 举报
回复
引用 15 楼 lanzheking 的回复:
[quote=引用 13 楼 dalor 的回复:] [quote=引用 12 楼 lanzheking 的回复:] [quote=引用 11 楼 dalor 的回复:] 1.我想到的就是使用singleInstance 或 singleTask来解决。 2.Home键缩小应用再点击图标保留在之前的activity,你是不想要这种效果?
1 singleInstance 和 singleTask 确实可以解决, 2 正如你所说,保留最上 也就时Home前的那个activity , 网上找到的解决方法,都是说去掉singleInstance 和 singleTask,我蛋碎一地。[/quote] 第2个问题,我现在做一个项目,用的是singleTop,当切换到后台后,点击图标,还是切换之前的页面。[/quote] singleTop 和 standard home以后图标会留在之前activity , singleInstance和singleTask Home以后图标会 回到第一个activity。 你说的没错。 但我singleTop 进入几个activity 在直接跳回主页 , 主页就 onCreate 了。 当然主页可以做缓存, 重新onCreate后读缓存 在广播或别的形式 finish之前就主页。 但我想这不是最佳方案。 最好能直接跳回之前的主页activity , 淘宝看似做到了 , 头痛啊~。[/quote]
引用 15 楼 lanzheking 的回复:
[quote=引用 13 楼 dalor 的回复:] [quote=引用 12 楼 lanzheking 的回复:] [quote=引用 11 楼 dalor 的回复:] 1.我想到的就是使用singleInstance 或 singleTask来解决。 2.Home键缩小应用再点击图标保留在之前的activity,你是不想要这种效果?
1 singleInstance 和 singleTask 确实可以解决, 2 正如你所说,保留最上 也就时Home前的那个activity , 网上找到的解决方法,都是说去掉singleInstance 和 singleTask,我蛋碎一地。[/quote] 第2个问题,我现在做一个项目,用的是singleTop,当切换到后台后,点击图标,还是切换之前的页面。[/quote] singleTop 和 standard home以后图标会留在之前activity , singleInstance和singleTask Home以后图标会 回到第一个activity。 你说的没错。 但我singleTop 进入几个activity 在直接跳回主页 , 主页就 onCreate 了。 当然主页可以做缓存, 重新onCreate后读缓存 在广播或别的形式 finish之前就主页。 但我想这不是最佳方案。 最好能直接跳回之前的主页activity , 淘宝看似做到了 , 头痛啊~。[/quote] 淘宝,看起来好像用的是缓存。。。。。 这样,主页设置为singleTask,会产生什么问题?当在主页时,按home,再点击应用图标,会重新创建。。。
lanzheking 2015-03-03
  • 打赏
  • 举报
回复
引用 13 楼 dalor 的回复:
[quote=引用 12 楼 lanzheking 的回复:] [quote=引用 11 楼 dalor 的回复:] 1.我想到的就是使用singleInstance 或 singleTask来解决。 2.Home键缩小应用再点击图标保留在之前的activity,你是不想要这种效果?
1 singleInstance 和 singleTask 确实可以解决, 2 正如你所说,保留最上 也就时Home前的那个activity , 网上找到的解决方法,都是说去掉singleInstance 和 singleTask,我蛋碎一地。[/quote] 第2个问题,我现在做一个项目,用的是singleTop,当切换到后台后,点击图标,还是切换之前的页面。[/quote] singleTop 和 standard home以后图标会留在之前activity , singleInstance和singleTask Home以后图标会 回到第一个activity。 你说的没错。 但我singleTop 进入几个activity 在直接跳回主页 , 主页就 onCreate 了。 当然主页可以做缓存, 重新onCreate后读缓存 在广播或别的形式 finish之前就主页。 但我想这不是最佳方案。 最好能直接跳回之前的主页activity , 淘宝看似做到了 , 头痛啊~。
开发者_android 2015-03-03
  • 打赏
  • 举报
回复
问题1,使用singleTop应该也是可以的。 问题3,解决方法很多了,比如,把activity全在一个list中,关闭时遍历finish。
开发者_android 2015-03-03
  • 打赏
  • 举报
回复
引用 12 楼 lanzheking 的回复:
[quote=引用 11 楼 dalor 的回复:] 1.我想到的就是使用singleInstance 或 singleTask来解决。 2.Home键缩小应用再点击图标保留在之前的activity,你是不想要这种效果?
1 singleInstance 和 singleTask 确实可以解决, 2 正如你所说,保留最上 也就时Home前的那个activity , 网上找到的解决方法,都是说去掉singleInstance 和 singleTask,我蛋碎一地。[/quote] 第2个问题,我现在做一个项目,用的是singleTop,当切换到后台后,点击图标,还是切换之前的页面。
lanzheking 2015-03-03
  • 打赏
  • 举报
回复
引用 11 楼 dalor 的回复:
1.我想到的就是使用singleInstance 或 singleTask来解决。 2.Home键缩小应用再点击图标保留在之前的activity,你是不想要这种效果?
1 singleInstance 和 singleTask 确实可以解决, 2 正如你所说,保留最上 也就时Home前的那个activity , 网上找到的解决方法,都是说去掉singleInstance 和 singleTask,我蛋碎一地。
开发者_android 2015-03-03
  • 打赏
  • 举报
回复
1.我想到的就是使用singleInstance 或 singleTask来解决。 2.Home键缩小应用再点击图标保留在之前的activity,你是不想要这种效果?
lanzheking 2015-03-03
  • 打赏
  • 举报
回复
引用 9 楼 dalor 的回复:
[quote=引用 8 楼 lanzheking 的回复:] [quote=引用 6 楼 dalor 的回复:] 支持楼上,按你说的,用fragment比较简便。
做主页菜单什么的 , 确实都是fragment, 但是如果每个页面都有返回主页 按钮 , 那就得整个应用所有页面都用fragment。 另外fragment 有另一个问题 不知道时我做法错误还是本身就这样 比如主页MainActivity 有个菜单 用fragment 做页面。 比如4个标签页 这时为4个标签页的activity 做多进程处理是无效的,进程始终处在 MainActivity 所在的进程。 所以如果整个项目都fragment 一是好像另类了点, 二是资源没有独立activity 那么好控制。 [/quote] 如果页面很多的确不适合用太多fragment。 你说的4个标签页,如果用fragment,怎么会是你所说的‘4个标签页的activity’做‘多进程’处理?没明白你表达的。[/quote] 总之正如你所说,页面实在太多了。 场景就是每个页面都有返回首页activity的入口,并且页面层级可能很深。 引发的问题: 1. 如何回到第一个activity后不重新oncreate. 2. 如果使用singleInstance 或 singleTask来解决 如何解决引发的另一个问题,Home键缩小应用再点击图标保留在之前的activity. 3.比如 A->B->C->D->A D activity回到 A activity 后 如何方便的吧 B C 一期finish掉 (这个问题倒不是关键,解决以上问题,这个问题总有办法解决 , 哪怕发广播去finish)。
开发者_android 2015-03-03
  • 打赏
  • 举报
回复
引用 8 楼 lanzheking 的回复:
[quote=引用 6 楼 dalor 的回复:] 支持楼上,按你说的,用fragment比较简便。
做主页菜单什么的 , 确实都是fragment, 但是如果每个页面都有返回主页 按钮 , 那就得整个应用所有页面都用fragment。 另外fragment 有另一个问题 不知道时我做法错误还是本身就这样 比如主页MainActivity 有个菜单 用fragment 做页面。 比如4个标签页 这时为4个标签页的activity 做多进程处理是无效的,进程始终处在 MainActivity 所在的进程。 所以如果整个项目都fragment 一是好像另类了点, 二是资源没有独立activity 那么好控制。 [/quote] 如果页面很多的确不适合用太多fragment。 你说的4个标签页,如果用fragment,怎么会是你所说的‘4个标签页的activity’做‘多进程’处理?没明白你表达的。
lanzheking 2015-03-03
  • 打赏
  • 举报
回复
引用 6 楼 dalor 的回复:
支持楼上,按你说的,用fragment比较简便。
做主页菜单什么的 , 确实都是fragment, 但是如果每个页面都有返回主页 按钮 , 那就得整个应用所有页面都用fragment。 另外fragment 有另一个问题 不知道时我做法错误还是本身就这样 比如主页MainActivity 有个菜单 用fragment 做页面。 比如4个标签页 这时为4个标签页的activity 做多进程处理是无效的,进程始终处在 MainActivity 所在的进程。 所以如果整个项目都fragment 一是好像另类了点, 二是资源没有独立activity 那么好控制。
lanzheking 2015-03-03
  • 打赏
  • 举报
回复
引用 5 楼 u012301841 的回复:
[quote=引用 3 楼 lanzheking 的回复:] [quote=引用 1 楼 bdmh 的回复:] 你直接back就行了,为啥要创建一个A呢
那如果时 A -> B -> C -> D -> A 呢 其实就类似淘宝顶部回首页的效果。 [/quote] 如果这样的话就别用Activity了,可以用Fragment,这样的话会比较好点的 .[/quote] Fragment 虽然可以做 但在企业开发中 这样不太方便, 一个项目几十个页面。一般还是传统activity跳转。 真搞不懂淘宝京东怎么实现了, 反编译了一下, 淘宝用的也仅仅时 singleTop 单却做到了。
开发者_android 2015-03-03
  • 打赏
  • 举报
回复
支持楼上,按你说的,用fragment比较简便。
  • 打赏
  • 举报
回复
引用 3 楼 lanzheking 的回复:
[quote=引用 1 楼 bdmh 的回复:] 你直接back就行了,为啥要创建一个A呢
那如果时 A -> B -> C -> D -> A 呢 其实就类似淘宝顶部回首页的效果。 [/quote] 如果这样的话就别用Activity了,可以用Fragment,这样的话会比较好点的 .

80,472

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧