Articles of activity lifecycle

活动和片段生命周期,onResume是否一个接一个地开火?

我想知道当用户从Home Screen返回Activity时正确的顺序是什么。 Activity’s onResume()先执行,然后Fragment’s onResume()执行吗? 它是按顺序执行还是同时执行? 我在Fragment的onResume()中添加了一些代码,但它似乎没有在Activity的onResume()之后触发。

onCreate(Bundle savedInstanceState)始终为null

我知道,这个问题之前在stackoverflow上被问到,但是没有答案对我有用。 可能值得一提的是: 我将ActionBarSherlock与支持包一起使用。 我按下主页按钮时调用onSaveInstanceState方法。 onCreate方法总是为Bundle savedInstanceState赋予NULL。 永远不会调用onRestoreInstanceState方法。 (我不介意onCreate有效;))。 另外(应该没关系)我尝试将super.onSaveInstanceState(outState)放在onSaveInstanceState的底部。 也没有运气。 这是代码。 我希望有人有这个问题并解决了它。 public class MainActivity extends SherlockFragmentActivity { private static final String LOG_TAG = MainActivity.class.getSimpleName(); private static String STATE_TO_STORE = “state_to_store”; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(LOG_TAG, “onCreate: savedInstanceState = ” + (savedInstanceState == null ? “NULL” : “Not NULL”)); // … more […]

onStop vs onDestroy

我试图准确研究何时为活动调用onDestroy方法,但我已经阅读了一些令人困惑和冲突的信息。 一般来说,我的问题是:onDestroy方法在什么情况下实际调用了一个活动? 更具体地说,如果我有两个活动,即活动A和活动B,如果活动A正在运行并且我创建了一个意图并切换到活动B,那么活动A是仅停止还是被销毁?

Android活动中onCreate方法第二次实现的用法是什么?

我一直在Activity生命周期中使用onCreate方法从保存状态启动或恢复,但最近发现还有另一个包含PersistableBundle onCreate方法: @Override public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) { super.onCreate(savedInstanceState, persistentState); } 我发现自Android 21以来它已被添加。 有人可以在调用和使用时提供有关此方法的完整信息吗?

为什么在onSaveInstanceState()中保存非Parcelable对象的Hashtable有时会起作用?

在阅读了介绍性的Android编程书之后,我想改变示例应用程序,以巩固我对一些未真正涵盖的主题的理解。 在进行更改时,我犯了一个错误,但我很好奇为什么错误在某些情况下有效而在其他情况下无效。 应用程序中的活动将一系列问题存储在Hashtable ,其中Question是一个包含int和两个字符串的小类。 最初编写时,活动会在每个onCreate()上从服务器下载问题,因此我想实现onSaveInstanceState()以防止一些冗余下载。 onSaveInstanceState()使用putSerializable()将Hashtable保存到Bundle中。 @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); // mQuestions is a member variable of // type Hashtable if (mQuestions != null && mQuestions.size() > 0) { outState.putSerializable(SAVED_QUESTIONS, mQuestions); } } 即使在我知道Parcelable是什么或如何实现之前,它也能完美地适应屏幕方向的变化。 我只知道当我按下模拟器的主页键和应用程序静默时出现问题,无法在没有LogCat输出的情况下崩溃。 堆栈跟踪让我查找Parcelable并使Question实现它。 我的问题不是我做错了。 问题是: 当Question类没有实现Parcelable时,为什么应用程序只在按Home而不是屏幕方向更改时崩溃?

活动开始时的animation会跳过帧

在视图上调用onGlobalLayoutFinished后,我在活动中设置视图animation。 我的animation在开始时跳过~300 ms的帧。 如果我将animation延迟超过300毫秒,它不会跳过任何帧。 导致这种情况发生的活动是怎么回事? 我怎么能阻止它或者我怎么能听完呢? 我创建了一个死的简单应用程序来演示这种行为。 AndroidManifest.xml中内容: TestLagActivity.java: public class TestLagActivity extends ActionBarActivity { private View mRedSquareView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test_lag); mRedSquareView = findViewById(R.id.activity_test_lag_redSquareView); if (mRedSquareView.getViewTreeObserver() != null) { mRedSquareView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { public void onGlobalLayout() { mRedSquareView.getViewTreeObserver().removeOnGlobalLayoutListener(this); animate(); } }); } } private void animate() { ObjectAnimator xAnimator = ObjectAnimator.ofFloat(mRedSquareView, […]

电池耗尽时会调用哪些Android方法?

当我的Android设备上的电池死机时 ,在设备的“关闭电源”阶段调用Activity和Fragment类(如果有)中的哪些方法? 此外,如果用户当前正在查看我的应用程序中的屏幕,并且他们按住电源按钮并选择关闭,那么当电池电量耗尽并自动关闭时,调用/未调用的事件是否一致? 在onPause? 调用OnStop? 的OnDestroy? OnDetach? 额外奖励:我是否有足够的时间将少量数据保存到Web服务器? 为了澄清当设备的电池“完全”死亡时“死亡”,不再接受输入,并在屏幕上popup一个消息框/加载屏幕,显示“电源关闭”。 设备关闭后不久就在那里。 我只需要足够的时间来保存手机关机前的状态,我有一个策略来清理保存的数据,如果手机没有关闭,但我想尽可能接近手机关闭(不超过一分钟真是无意义)。

我应该在销毁活动时手动关闭我的应用程序创建的HandlerThreads吗?

我的应用程序由一个Activity组成。 在这个活动中,我正在创建多个HandlerThread ,它们在循环中运行以执行套接字阻塞操作。 目前,我在Activity.onDestroy()期间向这些HandlerThread的每个人发布了一条退出消息。 有时,当我打开我的应用程序,关闭它并重新启动它时,它会崩溃(很多时候是由于向未运行的处理程序线程发送消息)。 我的问题是: 关闭我的应用程序时关闭HandlerThread的正确方法是什么? (请注意,这些线程可能在套接字操作上阻塞)。 编辑:更多信息:我有一个处理程序线程池,它是在onCreate中启动的(当我第一次启动我的应用程序时没问题)。 每个处理程序runnable循环都包含一个 if (shouldRun) { //body } else { close(); } 声明。 close方法删除所有挂起的消息和runnables,并将消息发送给处理程序,这将导致他调用它的looper.quit() 。 这样,如果当前处理程序线程被IO操作阻止,只有一旦它完成它,他将退出()。

Android应用,活动状态(正在运行,未运行,前景/背景)

我遇到了一个要求,但我无法获得正确的实施方式,因此需要你的帮助。 我想做的事? – 我想根据我得到的通知执行操作,如下所示: 当应用程序打开并处于前台时,即用户可见,我收到通知,我只需显示一个popup窗口即可启动我的活动B. 当应用程序关闭时,即无论是在后台还是在前台,我都会收到通知,我将首先启动我的应用程序然后启动活动B. 当应用程序在后台运行时,即在最近但用户不可见时,我想启动我的活动B而不重新启动应用程序。 此外,在这种情况下,当用户按下活动B时,他们应该在将其发送到后台之前看到他们停止的屏幕。 我做了什么? 我已经取得了第一点和第二点。 我想达到第3点。 我试过以下 public static boolean isApplicationBroughtToBackground(final Activity activity) { ActivityManager activityManager = (ActivityManager) activity.getSystemService(Context.ACTIVITY_SERVICE); List tasks = activityManager.getRunningTasks(1); // Check the top Activity against the list of Activities contained in the Application’s package. if (!tasks.isEmpty()) { ComponentName topActivity = tasks.get(0).topActivity; try { PackageInfo pi = […]

finish()和Activity生命周期

我正在学习一门课程的Android编程,我有一个关于finish()如何适应Activity生命周期的快速问题。 当你调用finish()时,会启动什么生命周期回调? 我认为它是onPause(),然后是onStop()和onDestroy()。 它是否正确? 真的,我只是想确保它不直接跳到o​​nDestroy()。