Articles of android lifecycle

防止我的Android应用程序的多个实例由单个活动组成

我有一个Android应用程序,它由一个Activity组成。 我怎样才能确保在给定时间内只存在一个应用程序实例(== Activity )? 我遇到了一个情况,我通过多次点击应用程序图标成功打开了我的应用程序的多个实例(这不会一直重现)。

以不同的过程打开相机

我的一个应用程序在一些Kitkat Samsung设备中存在严重的活动娱乐问题。 拍摄照片时问题更频繁出现,并且在具有一半RAM的蹩脚的Jellybean Samsung没有观察到。 尽管没有OutOfMemoryException ,但日志显示内存不足的情况。 我认为在Kitkat有一个更积极的活动关闭政策(或者默认的相机应用程序漏洞)。 当我的应用程序的内存很高时,我想知道操作系统是否会关闭我的活动,或者当所有应用程序使用的总内存很高时,它会关闭它们。 如果操作系统具有每个进程阈值,则可能在不同的进程中打开相机可能会有所帮助。 我知道可以使用清单中的process属性在自己的进程中启动服务。 假设Activities不存在等效属性,如果我在自己的进程中启动了代理服务,然后从该服务启动了一个活动,那么活动是否也会在此过程中运行?

活动生命周期

我正在努力了解一个活动的完整生命周期。 所以我在Google上搜索并发现了很多关于活动生命周期的教程,但在所有教程中我都没有在生命周期图中find这些方法: 1. OnContentChanged() 2. OnPostCreate() 3. OnPostResume() 4. OnWindowfocusChanged() 5. OnuserLeaveHint() 6. OnUserInteraction() 7. OnDetachedFromWindow() 我想知道为什么这些方法不包含在android docs的活动生命周期图中。 还有一个问题: 当第一次创建一个活动时,系统调用OnContentChanged()方法作为第一个方法,系统的最后一次调用是一个活动被杀死时的OnDetachedFromWindow()方法,但是android文档说一个活动的整个生命周期发生在OnCreate()之间OnCreate()和OnDestroy() ?

访问片段视图时偶尔会出现NPE

输入片段时偶尔会出现NullPointerException 。 它发生在应用程序在后台很长一段时间然后我打开它并滑动到这个片段。 public class SummaryFragment extends Fragment implements FragmentLifecycle { private static final String TAG = “DTAG”; private DateFormat dateFormatName; private Preference prefs; private List monthList; private TextView totalTimeFullTv; private TextView totalTimeNetTv; private TextView averageTimeTv; private TextView overUnderTv; private TextView minTimeTv; private TextView maxTimeTv; private TextView vacationsTv; private TextView sickTv; private TextView headlineTv; private […]

由于应用onCreate()多次调用,M上但不是L上的静态variables重新初始化

我有一个应用程序,它有一个派生自Application类的类,并注意到它的onCreate()方法被多次调用。 除此之外,每次调用onCreate()时,都会重置其静态variables的值。 这种行为只发生在M上,它不会发生在L上。我试图找出它是M中的错误还是M中的预期变化,或者存在一些基本的固有问题,应用程序架构已经处于hibernate状态,现在只有表现为M. 每当调用广播接收者的onReceive()时,就会调用Application派生类的onCreate()。 未创建Application类的多个实例 – 在同一对象实例上调用onCreate(),并且始终存在相同的应用程序上下文。 以下是一些代码片段,展示了这一观察结果: public class MyApplication extends Application { public static int debugVal = 5; public MyApplication () { theApp = this; } public void onCreate () { Log.v(TAG, “++++++++++++ onCreate() debugVal: ” + debugVal); debugVal = 10; …. public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive (Context […]

为什么在我的Activity启动后立即调用onStop?

我有一个活动需要在启动时打开屏幕(以防屏幕关闭)。 所以在我的onCreate ,我有: getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON |WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 使用这种简单的组合,我能够在我的后台服务启动时显示我的活动(是的,这是一个合法的案例)。 然而,问题是当我在这种情况下启动我的活动时,存在一种非常奇怪的生命周期行为。 使用广泛的日志记录,我能够发现在活动开始后立即发生以下7个步骤: 的onCreate 在onStart 的onResume 在onPause 的onStop 在onStart 的onResume 看到了吗? 对于简单的活动开始,onStart被调用两次。 而且更重要的是,onStop被神秘地称为,即使活动刚刚开始 – 没有任何事情会导致它停止。 我已经在许多不同的场景中对此进行了测试,看起来这种奇怪的行为只发生在屏幕关闭且活动在销毁后启动时。 如果屏幕打开,或者活动已停止[但尚未销毁],则活动正常启动,onStart仅调用一次。 结论 :似乎当我的活动启动并且强制启动屏幕时,Android会启动活动,然后停止活动,然后再次启动它,原因无关紧要。 那么:为什么会这样呢? 我有什么办法可以解决这个问题(所以只有在有正当理由的情况下才会调用onStop)? 笔记: 有问题的活动是使用singleTask启动模式 我试过禁用键盘锁/锁但它没有效果 我在运行Android 3.2的三星Galaxy Tab 10.1上见证了这种行为。 我还没有测试这是否适用于其他任何事情……

执行重新创建方法后未恢复的活动暂停

我有一个HoneyComb的项目,我在主Activity中的onResum()方法上使用了recreate()方法后出错。 11-10 22:05:42.090: E/ActivityThread(1917): Performing pause of activity that is not resumed: {com.blogspot.honeyapp/com.blogspot.honeyapp.Main} 11-10 22:05:42.090: E/ActivityThread(1917): java.lang.RuntimeException: Performing pause of activity that is not resumed: {com.blogspot.honeyapp/com.blogspot.honeyapp.Main} 11-10 22:05:42.090: E/ActivityThread(1917): at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2517) 11-10 22:05:42.090: E/ActivityThread(1917): at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2505) 11-10 22:05:42.090: E/ActivityThread(1917): at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:2483) 11-10 22:05:42.090: E/ActivityThread(1917): at android.app.ActivityThread.access$700(ActivityThread.java:122) 11-10 22:05:42.090: E/ActivityThread(1917): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1031) 11-10 22:05:42.090: E/ActivityThread(1917): at […]

尽可能防止活动被破坏

我有一个应用程序,一个包含片段的活动应用程序。 这个应用程序的通常用例是,你启动它并把电话拿走,不时,你回到手机并插入一些数据…这是一个日志应用程序,你正在做一些事情并插入你的结果进入应用程序… 我有这个问题,不时地,我的活动被摧毁并用空包重新创建……(大多数时候情况并非如此,但偶尔会发生这种情况……)。 我的应用程序有时会启动服务,即使这种服务在这种情况下被杀死… 这意味着系统已杀死我的应用程序,是吗? 我怎么能避免这个? 我需要保留用户数据和当前的顶级片段……并且它们被保存到捆绑包中,只要状态和数据得到保存,一切正常… 顺便说一句,我的活动始终是TOP ACTIVITY,只是屏幕经常关闭……我只想让我的活动尽可能长时间活着,直到用户离开后面的按钮……或者保存状态可靠 重要的提示 onSaveInstance并不总是有效(它不是生命周期的一部分,因此不能保证被调用)…它只能在大多数情况下工作……我需要一种方法来始终工作…如果android杀了我的应用程序。 ..

释放onPause而不是onDestroy中的资源

这是关于POST-honeycomb (即Android 3.0+),以下引用来自https://developer.android.com/reference/android/app/Activity.html 根据生命周期,onStop和onDestroy是可以杀死的,这意味着: 请注意上表中的“Killable”列 – 对于那些被标记为可填充的方法,在该方法返回之后,托管该活动的进程可能在任何时候被系统杀死而不执行其代码的另一行 换句话说,保证调用onStop(沿着此事件之前发生的其他事件),但在方法返回时,进程可能会死亡,因此无法保证调用onDestroy。 另一句话说: 对于那些未标记为可填充的方法,系统不会从调用方法开始并在返回后继续执行活动的进程。 其次是 因此,活动处于可填充状态,例如,在onPause()之后到onResume()的开始之间。 但这与上述内容不符, 除非这只对应于PRE蜂窝 。 POST蜂窝不是这样,对吗? 所以基本上,onPause和onStop都可以保证被调用。 假设我只在onDestroy中释放资源,那么这可能会导致泄漏,因为可能不会调用onDestroy,对吧? 但是,这个场景(即,没有调用onDestroy)是否会发生在进程被android本身杀死的时候? 是否有任何其他方案导致不调用onDestroy, 从而泄漏资源 。 当Android杀死资源时会破坏资源并且不会发生泄漏 (即使我们没有明确释放资源吗?)这是真的吗? 请提供详细资料,说明这些陈述(1)(2)(3)(4)(5)是否正确。

为什么片段的onCreate()有时在Activity的onCreate()之前被调用?

最近我遇到了一个难以重现的问题。 当片段尝试使用Activity中的数据初始化ArrayAdapter时,会发生NPE。 在Activity的onCreate方法中初始化的默认列表: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // … mAccounts = new ArrayList(); // … } @Override public List getAccounts(){ return mAccounts; } 该片段还在其onCreate()中创建了一个列表适配器: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); setHasOptionsMenu(true); //mAccountProvider is an interface implemented by the activity mAccounts = mAccountProvider.getAccounts(); mAccountAdapter = new AccountAdapter(getActivity(), R.layout.account_list_item, mAccounts); } 调用默认的getCount()方法时,NPE发生在AccountAdapter内部。 […]