多activity仍是单activity的选择

多activity还是单activity的选择
大家在开发APP的时候是用多个activity(例如一个页面一个activity),还是整个程序只用了一个activity(页面用view来呈现)?
它们的优点和缺点各是什么呢?
小弟不才,特来求解

我自己做的APP除了登陆用一个activity,整个主程序只用了一个activity,页面跳转用viewflipper来实现,每个页面都是一个view,所有的页面都继承自自定义的一个抽象类BaseView,里面实现了页面之间的数据传递和一些共用的方法。
主要我觉得每个activity都有自己的生命周期,而且每次需要AndroidManifest中注册一遍感觉好麻烦,就自己想了这个办法,具体哪个好其实我自己也说不上来,哪位大神给小弟解释一下?多activity仍是单activity的选择
------解决思路----------------------
activity+fragment,fragment ui灵活、重用性强、切换轻量、适配不同屏幕。不过activity也用的挺多的,viewflipper没怎么用,每个activity都有自己的生命周期也便于根据具体实际进行控制,毕竟不同页面功能不同,在相应生命周期完成的任务也会有区别。
如果单单是麻烦,可以用android studio开发会便捷点,比如能自动在AndroidManifest中注册
------解决思路----------------------
引用:
Quote: 引用:

activity+fragment,fragment ui灵活、重用性强、切换轻量、适配不同屏幕。不过activity也用的挺多的,viewflipper没怎么用,每个activity都有自己的生命周期也便于根据具体实际进行控制,毕竟不同页面功能不同,在相应生命周期完成的任务也会有区别。
如果单单是麻烦,可以用android studio开发会便捷点,比如能自动在AndroidManifest中注册


我这套做法是我2年前做app的时候自己弄的,中间呢停了一年没弄android,搞web去了,现在又回来弄android,以前做的时候是在2.1的版本上开发,现在都到5.0了,感觉自己可能落后了。闲话说完,突然想到我这个做法还有一个好处:
比如我在一个页面输了很多数据,或者说我动态改变了一个页面的布局,然后去了下个页面,但是当我返回上个页面的时候,希望还是原来的样子,输入的数据还在,改变的布局也还在,如果是activity就比较麻烦,需要先保存数据,然后用onActivityResult把数据传回上个页面,再去填充页面改变布局等等。我用view就不需要顾虑这个问题,因为每个view存在viewflipper中,类似于activity的栈,我从一个view返回上个view时,依然是原来的状态,因为view本身变并没有销毁。
当然上面只是我的理解,有什么不对欢迎指出,暂时想到这些

你页面跳转正常情况下(非内存不够)是执行onpause、onstop方法不会销毁activity的具体的view也不会销毁,返回回去还是原来的样子
------解决思路----------------------
activity的好处就是,你一旦finish掉,资源就被释放掉了,如果需要手动释放的写在onDestory里面,如果是view的话是不是每次释放资源都要手动呢
------解决思路----------------------
用一个activity的话,个人认为,如果是一个简单的应用的话,会方便一些,少去了一些数据信息的交换,等于说有一个一个共享的对象用来存储运行时数据。
但是对于复杂的应用来说就不是很适合,首先一个activity结构就不合适,让所有的UI天然的耦合在一起。这样以来,UI的逻辑,数据的初始化,每一个细节都要自己考虑到,因为共享数据 ,所以数据访问控制,多线问题就会变的越来越麻烦。

所以小应用可以用,大一些的应用不建议,个人认为。
------解决思路----------------------
引用:
Quote: 引用:

这种写法对机子的要求高,少点VIEW还行,多VIEW多资源的那种,适配低配置机子就不流畅了。


恩,这个我想过的,不过我做的那个app层级最多只到4级,而且每次退出页面我自己手动释放资源,不过具体性能上跟activity自己释放比哪个好,倒没测试过,不是很清楚了

都是胡说八道的 google这套activity根本就是莫名其妙,没必要分。
就一个activity,像你说的分view就最好,否则你会遇到数不清的麻烦,google他自己设计这一套的时候都没想清楚。
我就提一个例子:
假设你的应用有网络连接,当有错误的时候你想弹出提示框怎么办?
你根本没办法知道当前展示的是哪个activity,但是弹出窗口是需要基于activity的
至于资源释放的问题,那更加扯淡了。你只要不缓存view,照样会被释放掉。至于图片什么的问题,你就是用activity也解决不了它被cache住的问题。
至于说机子性能,你分view跟分activity是一样的效果。只要你不上来将ui文件全部展开就没事。
我的观点就是:你分view是对的,应该往这个方向走,分activity反而是没必要的。
------解决思路----------------------
引用:
Quote: 引用:

activity+fragment,fragment ui灵活、重用性强、切换轻量、适配不同屏幕。不过activity也用的挺多的,viewflipper没怎么用,每个activity都有自己的生命周期也便于根据具体实际进行控制,毕竟不同页面功能不同,在相应生命周期完成的任务也会有区别。
如果单单是麻烦,可以用android studio开发会便捷点,比如能自动在AndroidManifest中注册


我这套做法是我2年前做app的时候自己弄的,中间呢停了一年没弄android,搞web去了,现在又回来弄android,以前做的时候是在2.1的版本上开发,现在都到5.0了,感觉自己可能落后了。闲话说完,突然想到我这个做法还有一个好处:
比如我在一个页面输了很多数据,或者说我动态改变了一个页面的布局,然后去了下个页面,但是当我返回上个页面的时候,希望还是原来的样子,输入的数据还在,改变的布局也还在,如果是activity就比较麻烦,需要先保存数据,然后用onActivityResult把数据传回上个页面,再去填充页面改变布局等等。我用view就不需要顾虑这个问题,因为每个view存在viewflipper中,类似于activity的栈,我从一个view返回上个view时,依然是原来的状态,因为view本身变并没有销毁。
当然上面只是我的理解,有什么不对欢迎指出,暂时想到这些


这个问题很好解决,估计就是因为你的view在oncreateview里重复创建 了。用下面代码就行
if (view!=null) {
ViewGroup parent = (ViewGroup) view.getParent();
if (parent!=null) {
parent.removeAllViews();
}
return view;
}

根据需要添加
------解决思路----------------------
我们的项目都是FragmentActivity+Fragment  除了登陆是个activity之外 就用 了这2个activity
看需要 主要是对队列的管理
------解决思路----------------------
我觉得吧,使用多个activity的好处在于,内存可以局部收回
------解决思路----------------------
引用:
Quote: 引用:

用一个activity的话,个人认为,如果是一个简单的应用的话,会方便一些,少去了一些数据信息的交换,等于说有一个一个共享的对象用来存储运行时数据。
但是对于复杂的应用来说就不是很适合,首先一个activity结构就不合适,让所有的UI天然的耦合在一起。这样以来,UI的逻辑,数据的初始化,每一个细节都要自己考虑到,因为共享数据 ,所以数据访问控制,多线问题就会变的越来越麻烦。

所以小应用可以用,大一些的应用不建议,个人认为。


先谢谢你的回答,不过第二段听的不是很明白。多activity UI的逻辑,数据的初始化不也是需要自己考虑,自己控制吗?
对的,因为是用一个activity,所以view是共用一个context的,这会对数据访问控制,多线问题造成什么麻烦吗?希望您能说的具体一点多activity仍是单activity的选择


首先说一下结构,你之前说用一个antivity可以方便解决startActivityForResult的问题,这个就要看什么结构,一般的这样的做法使得界面间产生了外部数据耦合,这是一种高耦合,是软件设计不建议的。而startActivityForResul是通过参数列表,是一种弱耦合,是可以的。
但是在一些模块,比如支付流程,会有第一步,第二步到支付完成,这个整体上是一个复杂的模块,使用Activity+viewpager+fragment,用fragment显示每一步的界面,接受用户数据,用activity汇总数据,用viewpager实现界面切换,然后在最后一步实现和服务器的整体数据交互,这样在一个模块里,我认为这样做是可以的
所以,不是什么情况都适合用一个activity,很多时候,android一个界面就是一个模块,这个时候把不相关的多个模块用一个activity展示,个人认为,不是很合适
一个activity,数据是私有的,在oncreate里初始化,随着activity的销毁而销毁。而如果在activity里有多个View的公有数据,又有通过公有数据的数据传递的话,那什么时候触发初始化,什么时候数据失效就需要自己管理了。
如果你在activity里存放公有数据,只是通过activity来控制显示逻辑,把数据和逻辑都封装在View里,那你这样是用activity做了系统的activity stack的工作,view做了系统activity的工作。
而我认为activity stack控制的导航挺好的,没必要自己控制,比如用户按back键,你用View+activity要多做多少控制。