Articles of 生命周期

滑动ViewPager时,Fragment不会调用onSaveInstanceState?

我有一个ViewPager的问题,我的ListView正在放弃它的滚动位置。 ListView的状态可以很容易地存储和恢复使用: @Override public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.frag_cool_things, container, false); AdvListView listView = (AdvListView) v.findViewById(R.id.lv0); listView.setOnItemClickListener( mOnListItemClicked ); if (null != savedInstanceState) { listView.onRestoreListViewInstanceState(savedInstanceState.getParcelable("list_state")); } mListView = listView; return v; } @Override public void onSaveInstanceState (Bundle outState) { super.onSaveInstanceState(outState); outState.putParcelable("list_state", mListView.onSaveListViewInstanceState()); } 然而,问题是,当片段正在被扫描onDestroyView()被调用,但从来没有调用onSaveInstanceState (Bundle outState) 。 […]

Android睡眠后的活动生命周期

如果一个活动正在屏幕上显示,并且有一个点击监听器的button,在onCreate方法期间,该button被附加到button,然后设备进入睡眠模式(或者用户点击电源buttonclosures屏幕),当屏幕返回时,活动仍然可见,因为它是在进入睡眠模式之前。 onResume被调用,这被logging为活动生命周期的一部分。 我不明白的是为什么onCreate不会再被调用。 在睡眠模式退出后,button的点击监听程序如何工作? 你可能会认为Android已经销毁了所有正在运行的进程,这些进程连接到包含button的点击监听器的活动。

onSaveInstanceState / onPause – 等到状态被完全保存后才允许进程被终止

我正在开发我的第一个Android应用程序。 它有一个模型,在用户更新时保存到数据库中。 当onSaveInsanceState被调用时,我想保存一个id,可以用来从数据库中加载用户正在处理的文档。 但是这只能在文档完全打开数据库时才会发生。 在某些情况下,坚持一个复杂的文档可能需要几秒钟(我希望一旦我把所有的详细日志logging下来,速度会加快,在实际使用中,一个复杂的文档将由用户分阶段build立起来,每一个将被保存到数据库中,所以复杂的文档不一定要全部保存)。 现在,线程在Android上的第一条规则是“不要阻塞UI线程”,所以当然数据库交互发生在一个单独的线程上。 但是我对Android生命周期的理解是,在很多情况下onSaveInstanceState被调用,因为Android系统想要终止进程。 这表明我不能让这个方法返回,直到数据库线程完成保存文档(实际上我用我目前的devise,实际上我不知道文档的id号是什么,直到它被保存到数据库,所以我甚至不能把它放在保存的状态中)。 在这种情况下阻止UI线程等待持久任务是否合适? 当因为进程被onSaveInstanceState而调用onSaveInstanceState ,应用程序在前台不再可见,所以没有界面变得没有响应。 但是,当Activity实例被configuration更新抛出时,也会调用onSaveInstanceState ,这会在屏幕方向更改时发生。 这是非常不幸的,当转动屏幕横向几秒钟没有做任何事情。 在这种情况下,进程(因此内存空间)仍然存在,所以我不严格地要确保文件到达数据库,如果我可以在Bundle中存储引用而不是id。 但是我不知道这两种情况之间的区别。 对于这些情况是否有公认的做法? 我应该阻止线程安全吗? 我可以使用普通的Java线程原语来阻止和等待吗? 有什么我可以做, 不会阻止线程,但确保坚持任务将完成之前Androidclosures的过程? 所有这一切也适用于onPause ,因为onSaveInstanceState不一定会被调用。

片段onStop()在onStart()之后直接调用 – 为什么?

我的应用程序有一个奇怪的问题 – A有一个包含片段的片段活动 – 该片段启动一个AsyncTask onCreate()并取消AsyncTask onStop()。 我的问题出现了,因为虽然我的片段保持运行&不被模糊它onStop()被称为几乎直接后onCreate()。 有谁知道如何跟踪为什么会发生这种情况? 09-28 11:41:56.785: VERBOSE/SearchFragment1(924): onCreate() 09-28 11:41:56.796: VERBOSE/SearchFragment1(924): onStop() 编辑 我已经从片段中删除了代码,而且我仍然非常困惑 – 问题依然存在! 我已经添加了几行日志logging: 09-28 14:09:00.242: VERBOSE/SearchResultsFragment1(1789): onAttach() 09-28 14:09:00.242: VERBOSE/SearchResultsFragment1(1789): onCreate() 09-28 14:09:00.242: VERBOSE/SearchResultsFragment1(1789): onCreateView() 09-28 14:09:00.242: VERBOSE/SearchResultsFragment1(1789): onActivityCreated() 09-28 14:09:00.242: VERBOSE/SearchResultsFragment1(1789): onStart() 09-28 14:09:00.246: VERBOSE/SearchResultsFragment1(1789): onStop() 09-28 14:09:00.246: VERBOSE/SearchResultsFragment1(1789): onStart() 09-28 14:09:00.246: VERBOSE/SearchResultsFragment1(1789): onResume() 上述行为是…莫名其妙。 […]

Jelly Bean中的Android活动生命周期

我已经开发了几个月的应用程序,准备发布。 我一直在使用Android 4.0.4的摩托罗拉Xoom进行testing整个过程中,一切工作没有失败。 我从Google购买了Nexus 7(运行Jelly Bean 4.1),现在当设备处于hibernate或closures状态时,我正在获得活动生命周期中的各种问题。 我为了检查生命周期而创build了一个新项目,这就是我提出的结果。 以下代码是我在每个生命周期方法中所做的示例。 @Override protected void onPause() { Log.i("TEST", "onPause()"); super.onPause(); } Xoom的结果(预期结果) ———- Program Launch ————- onCreate(null) onStart() onResume() ———- Turn Off Screen ———— onPause() onSaveInstanceState(not null) onStop() ———- Turn Screen On ————- onReStart() onRestoreInstanceState(not null) onResume() Nexus 7的结果(意外结果) ———- Program Launch ————- onCreate(null) onStart() onResume() ———- Turn […]

Android – 记事本教程 – 生命周期 – 一些工作做了两次?

根据“应用基础”文章的“组件生命周期”一节,onResume()总是在View成为活动状态时被调用,与以前的状态无关。 在记事本教程练习3中,我发现NoteEdit.java中有一些令人困惑的东西: 在onCreate()和onResume()中调用populateFields()。 只有在onResume()才有足够的(甚至更好)吗? 在这样一个小例子中,如果populateFields()执行两次,它不会有任何的伤害,但是在一个更大的App中,事情可能会不同。 感谢致敬, Markus N.

Android – onDestroy应该破坏活动,它的variables和释放内存

我在我的代码中有一个错误,让我觉得我不完全理解Android生命周期。 是的,我已经阅读了所有文档并查看了这些图表,但他们似乎只是谈论何时保存数据,何时该活动可能失去焦点或被杀害。 但是,我的问题是,如果我不需要保存状态,variables及其存储值会发生什么变化? 我期望他们被销毁,但我的代码中的错误似乎表明,否则。 在我的情况下,这是发生了什么事。 我有一个活动,启动自定义视图(没有XML,我只是在我的自定义视图中的屏幕上绘制位图)。 我目前在我的活动中唯一的variables只是我的观点的一个variables:GameView gameView; 现在在我看来,我声明了几个位图,简单的int和floatvariables来处理绘图和触摸事件,并且我有一个包含小的位图的对象数组,每个对象的坐标和一些其他的东西。 我的这个对象的类中的一个variables是一个静态variables,它表示当前有多less个对象。 我是这样做的,所以对象的实例化使得它跟踪了man如何对象,而不是跟踪对象的类。 我期望静态variables在所有对象中保持相同的值,但是我也希望一旦为该Activity调用了onDestroyed,该variables就会与该Activity的视图中的所有其他variables和对象一起被销毁。 但是,这似乎并没有发生。 当这个Activity再次启动时,即使调用了onDestroyed,这个静态variables仍然包含上一次运行的值。 现在我的问题是不是如何解决这个问题(我可以编写不同的代码来修复这个bug),但我想了解为什么会发生这种静态variables,因为它不是全局的整个应用程序,它只存在于那个活动的观点? 另外,这让我想知道这个视图中的其他variables – 是在下次被调用的时候被销毁并释放内存,或者至less它们的值不再可用,或者我需要自己做这个 – 尽pipe我不需要保存任何这种状态数据? 感谢您对此的任何洞察。

Android应用程序对象生命周期

我找不到应用程序的对象(扩展应用程序)生命周期。 例如,如果我有一个通过报警调用的广播接收器会发生什么情况。 应用程序中的方法是否被调用? 还是独立于应用程序的一切? 如果我有一个在应用程序中实例化的数据帮助器,我从广播接收器调用它,它可用吗? Application对象的生命周期是什么时候被销毁? 什么时候使用警报时被调用? 当活动不在Application对象的前台时会发生什么? 提前致谢。 吉列尔莫。

更改屏幕方向后,TextView内容会丢失

在Android模拟器中观察我的应用程序行为后,我看到EditText内容在更改屏幕方向(Ctrl + F11)后保留。 但是TextView的内容被重置为初始值,并且不保存程序设置的最新信息。 这是行为的定义? 我能做些什么来保持这个内容?

确定更新片段而不是创build新的实例?

在Android文档中使用片段的示例中,当应用程序处于“双视图”模式时,只要应用程序需要显示不同标题的详细信息,就会重新创build细节片段。 FragmentTransaction.replace()用于将每个旧的细节片段实例换出一个新的细节。 这是推荐的做法吗? 当真正的意图(不是双关语意图)是更新UI显示的内容而不是UI本身时,创build新的UI实例是不是浪费。 在我看来,创build新实例的唯一原因是如果有人想将它们添加到后台,用户可以回溯步骤。 否则,是否安全/build议直接更新片段? 在这个例子中,这意味着沿着DetailsFragment.setShownIndex() 。 这将被称为传递新的标题索引,而不是重新创buildDetailsFragment 。 假设我们有一个示例的版本,其中一个活动同时pipe理两个片段,但是每次只显示一个片段,根据需要将每个片段交换出来。 活动是否可以创build每个片段的实例,保留每个片段的引用,然后根据需要简单地添加或删除这两个实例? 一个可能的粘滞的结果是,当标题片段处于resumed状态(即在“前景”)时,select标题将导致在详细片段处于中时调用DetailsFragment.setShownIndex() stopped状态。 好主意? 馊主意? 提前致谢。