在Android应用程序中,如何在单击其他活动中的按钮时启动新活动(GUI),以及如何在这两个活动之间传递数据?
android android-intent android-lifecycle android-button android-activity
什么是之间的差异onCreate(),onCreateView()以及onActivityCreated()将它们各自用于片段和什么?
android oncreate android-lifecycle android-fragments fragment-lifecycle
我的应用程序中的所有活动都要求用户登录才能查看.用户几乎可以从任何活动中注销.这是应用程序的要求.在用户注销的任何时候,我都想将用户发送到Login Activity.此时我希望此活动位于历史堆栈的底部,以便按"后退"按钮可将用户返回到Android的主屏幕.
我已经看到这个问题问了几个不同的地方,都回答了类似的答案(我在这里概述),但我想在这里提出收集反馈.
我已经尝试通过设置其Intent标志来打开Login活动,FLAG_ACTIVITY_CLEAR_TOP这似乎是在文档中概述的,但是没有实现我将Login活动放在历史堆栈底部并阻止用户导航回来的目标以前看到的登录活动.我也尝试使用android:launchMode="singleTop"清单中的Login活动,但这也没有完成我的目标(并且似乎无论如何都没有效果).
我相信我需要清除历史堆栈,或者完成之前打开的所有活动.
一种选择是让每个活动onCreate检查登录状态,finish()如果没有登录.我不喜欢这个选项,因为后退按钮仍可供使用,当活动靠近时自动导航.
下一个选项是维护LinkedList对所有可以从任何地方静态访问的开放活动的引用(可能使用弱引用).注销时,我将访问此列表并迭代所有先前打开的活动,并finish()在每个活动上进行调用.我很快就会开始实施这种方法.
但是,我宁愿使用一些Intent标志技巧来实现这一目标.我很高兴发现我可以满足我的应用程序的要求,而不必使用我上面概述的两种方法中的任何一种.
有没有办法通过使用Intent或清单设置来实现这一点,或者是我的第二个选择,保持已LinkedList打开的活动是最佳选择?或者我还有另一种选择吗?
希望有人可以帮助我弄清楚,如果不是解决方案,至少可以解释一个行为.
问题:
在某些设备上,按启动器图标会导致当前任务恢复,而在其他设备上则会导致初始启动意图被触发(有效地重新启动应用程序).为什么会这样?
细节:
当您按下"启动器图标"时,应用程序会正常启动 - 也就是说,我认为,会Activity使用操作android.intent.action.MAIN和类别以您的第一个名称启动一个Intent android.intent.category.LAUNCHER.但情况并非总是如此:
在大多数设备上,如果在应用程序运行后按下启动器图标,则恢复该进程中当前运行的活动(不是初始Activity).它的恢复方式与从OS菜单中的"Recent Tasks"中选择它的方式相同.这是我想要在所有设备上执行的操作.
但是,在选定的其他设备上会出现不同的行为
在摩托罗拉Xoom上,当您按下启动器图标时,无论当前运行的是什么,应用程序都将始终启动初始启动Activity.我假设启动器图标总是启动"启动器"意图.
在Samsung Tab 2上,当您按下启动器图标时,如果您刚刚安装了应用程序,它将始终启动初始设置Activity(与Xoom相同) - 但是,在安装后重新启动设备后,启动器图标将改为恢复应用程序.我假设这些设备在设备启动时将"已安装的应用程序"添加到查找表中,这允许启动器图标正确地恢复正在运行的任务?
我读过许多回答听起来类似我的问题,但简单地添加android:alwaysRetainTaskState="true"或使用launchMode="singleTop"的Activity不是答案.
编辑:
在最近发布此应用程序后,我们发现在首次重新启动后,所有设备上都会出现此行为.这看起来很疯狂,但通过重启过程,我实际上无法找到出错的地方.
我想实现一个屏幕,Activity和所有其他sreens与Fragments和managing all the fragments thru the activity.
这是个好主意吗?我的答案是否定的,但我仍然想更清楚地了解这个想法.
这个想法的优点和缺点是什么?
注意:
请不要给我片段和活动的链接.
编辑:
这是碎片和活动的一部分:
优点:
缺点:
如果我们不考虑平板电脑,为什么要使用碎片?活动和片段之间的起始时间差是多少?
android android-layout android-lifecycle android-fragments android-activity
从android doc这里http://developer.android.com/reference/android/app/Activity.html,它说"活动进入前台"将调用onPause(),并且"活动不再可见"将调用onStop().
不是"活动进入前景"与"活动不再可见"相同吗?你能告诉我他们之间有什么区别吗?
我正在构建的应用程序要求应用程序必须阻止操作系统在出于安全原因将其推入后台时截取应用程序的屏幕截图.这样,在应用程序之间切换时,它将无法看到最后一个活动屏幕.
我打算将此功能放在应用程序类的onPause方法中,但首先我需要了解如何实现此功能.
所以有人在那里,有一个线索如何解决这个问题?
开发时Android,您可以将目标(或最小)sdk设置为4(API 1.6)并添加android兼容包(v4)以添加支持Fragments.昨天我做了这个并成功实现Fragments了可视化来自自定义类的数据.
我的问题是:使用的好处是什么Fragments,而不是简单地从自定义对象获取View,并且仍然支持API 1.5?
例如,假设我有类Foo.java:
public class Foo extends Fragment {
/** Title of the Foo object*/
private String title;
/** A description of Foo */
private String message;
/** Create a new Foo
* @param title
* @param message */
public Foo(String title, String message) {
this.title = title;
this.message = message;
}//Foo
/** Retrieves the View to display (supports API 1.5. To use,
* remove 'extends Fragment' from the class …Run Code Online (Sandbox Code Playgroud) android software-design android-lifecycle android-fragments android-view
我正在创建事件搜索应用程序,我们在另一个屏幕中填充一个屏幕设置搜索条件,然后用户可以从第3个屏幕编辑搜索条件并转到第4个屏幕.
为了实现上述任务,我使用静态对象来记住应用程序周围的值,我不需要做任何额外的事情.
但我担心如果关于静态对象生命周期在android如果低内存发现android删除静态对象???
由于android支持多任务处理,如果用户切换到另一个应用程序并且当用户回来应用程序开始疯狂时,静态对象在多任务时被删除??? 任何的想法 ??并建议通过单例方法保持静态对象是更好的方法???
下图(来自官方文档)描述了Android活动的众所周知的生命周期:

在另一方面,当活动是由系统(例如,由于存储器需要被回收的)破坏,该活动的状态有时自动地保存和恢复由所述方法的装置onSaveInstanceState()和onRestoreInstanceState()由下图所示(也来自官方文件):

我知道,onSaveInstanceState()是不是总叫当活动即将被销毁.例如,如果由于用户按下"后退"按钮而导致销毁,则不会保留活动状态.但是在状态被保存并恢复和onSaveInstanceState()/ onRestoreInstanceState()被调用的情况下,它们究竟何时被调用?
例如,根据上面的图,onRestoreInstanceState()可以在之前onStart(),之后onStart()但之前onResume()或之后调用onResume().同样,存在几种可能性onSaveInstanceState().那他们什么时候打电话呢?
理想情况下,我希望看到一个组合图,显示活动生命周期状态和保存/恢复方法(如果存在).