问题标签 [android-lifecycle]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1199 浏览

android - onResume 中的 NullPointerException,与 AdMob 相关但不知道原因

我的应用程序的以下代码中出现空指针异常:

我无法复制这个问题,我已经在模拟器、galaxy S2 设备和 ZTE 刀片上使用了我的应用程序中的所有功能,但我找不到任何问题。

我收到很多用户报告,但他们没有说明原因,只是当他们尝试打开它时它会强制关闭。

也许我没有正确使用android生命周期?

作为一种解决方法,我将 AdMob 的内容封装在 try/catch 中,这样它就可以通过了。

有任何想法吗?

0 投票
4 回答
4839 浏览

android - 使用多个Activity时,Activity进入前台后保留数据如何处理?

目前我对 Android 的生命周期管理有点困惑。Activity 回到前台后,至少有 4 种可能恢复保留的数据:

  • Android 处理:如果内存足够,Android 会在 Activity 重启后存储和恢复重要数据(选中的单选按钮、EditText 的文本、-...等),用户的状态与 Activity 进入之前的状态相同背景。

  • onPause, onResume:覆盖 onPause 并将重要数据保存到数据库或文本文件中,并在下次执行 onResume 时恢复。

  • onSavedInstance(Bundle), onRestoreInstance(Bundle):我可以将数据作为键值对保存到包中,并在执行 onRestoreInstance 后恢复它们。

  • onRetainNonConfigurationInstance()、getLastNonConfigurationInstance():我在一个大对象中处理所有存储问题,并在执行 onCreate 时读取 getLastNonConfigurationInstance()。

尽管哪种方法最好是令人困惑的,但我想它依赖于开发经验来知道何时使用哪种可能性。如果你有一些很好的例子,我会很高兴,但这不是我的问题。我想知道当我有不同的活动并且一个活动在后台暂停时会被Android杀死时如何处理所有这些:

就我而言,我有一个 MainActivity 和一个 MessageActivity。MessageActivity 由一个 ViewSwitcher 组成,该 ViewSwitcher 由两个状态组成。状态一是单选按钮选择列表。状态二是带有两个按钮(发送和中止)的 EditText。当我对每个状态进行猴子测试时,点击 Android 主页按钮,然后重新启动应用程序,当我将处理留给 Android 时,具有正确状态和旧数据的正确 Activity 会进入前台。所以这行得通。
但是当Android在后台销毁MessageActivity时会发生什么:如果我使用Android方式,数据会丢失,我猜MainActivity(而不是MessageActivity->state(1或2))将在我重新启动应用程序后启动(是对吗?)。因此,当我想保留 MessageActivity 的数据时,我必须使用其他三种可能性之一。
当应用程序入口点(因此 MainActivity)与最后一个活动 Activity 不同时,如何巧妙地做到这一点。问题是我必须以 ViewSwitcher 的特殊状态恢复一个特殊的 Activity。我可以在 onStart() 或 onResume() 方法中使用 startActivity(Intent) 从 MainActivity 启动 MessageActivity (因为 MainActivity 可能是入口点),但随后我在生命周期管理中遇到了很多逻辑问题。由于这个事实,我认为这不是正确的方法。

但是,这样做的正确和最佳方法是什么?

0 投票
1 回答
813 浏览

android - 最佳实践:管理片段之间的 android 数据库引用

如何处理显示数据列表的片段和在后台更新数据的不同线程/类之间的引用。因此,我需要能够通过 Observer-inf 或类似的东西从片段外部强制更新。

目前,我正在使用虚拟工厂类根据我的默认设置创建一个新的 SqlLiteDatabase 对象。

然后我从每个片段中调用它并设置适配器,这同样适用于数据插入器线程。要关闭数据库,我会覆盖我的活动的 onDestroy() 并调用:initFor(this).close(); .

这非常难看,并且在方向更改时失败。我正在考虑 SQLiteOpenHelper 但我不知道它将如何帮助我。

0 投票
2 回答
1035 浏览

android - 图像不会在将屏幕方向从垂直旋转到水平或反之亦然时出现?

我使用意图从 SD 卡中选择了一张图像,在选择图像后,我在图像查看器中显示了该图像并且它正在显示,但是当我旋转屏幕时,所选图像没有出现,帮帮我?

我使用了浏览屏幕的意图-

并展示它

0 投票
1 回答
359 浏览

java - Android socket.close() 导致“系统调用被取消”?

我的 MainActivity 启动另一个名为 UdpListener 的线程。在 onResume 中,线程将被启动(这有效),在 onPause 中它应该停止,但是 socket.close() 在 LogCat 中导致错误消息“系统调用被取消”。UdpListener 本身在 JUnit 测试中工作正常,所以这一定是某种 Android 问题。

这些是我的线程的相应方法:

MainActivity.onPause():

else 分支的 serverSocket.close() 将被执行并导致 LogCat 条目,但为什么呢?

更新
也许 Dalvik 将此识别为错误,因为 close() 在当前阻塞在“接收”中的每个线程上抛出 SocketExceptions,但我不确定此异常是否与此问题有关。

http://docs.oracle.com/javase/1.4.2/docs/api/java/net/DatagramSocket.html#close()

0 投票
2 回答
4027 浏览

android-intent - 每当调用 startactivityforresult 时,Android 都会杀死我的应用程序

好吧,在我的应用程序中,我使用默认相机和 Android 画廊 startActivityforResult 作为;

我也能赶上 onActivityResult 。但是,如果内存不足并且我启动了此活动,我会体验到系统正在杀死我的父活动,即使活动返回一个值,我也会丢失所有局部变量(并且再次调用 onCreate())。只有 onResume() 应该被再次调用。

我试了几次,我很确定它与内存问题有关。如果有足够的内存进程成功执行。我怎样才能防止这种行为?

由于Android不会在前台杀死应用程序,我还可以使用此功能吗?我认为我的问题与这个几乎相似。


解决方案

除了Yahel提供的解决方案外,还可以使用以下方法。

0 投票
1 回答
1572 浏览

android - Android - 网络数据操作时如何处理来电

我的应用程序有一个功能,当在菜单中选择一个选项时,它会向 Web 服务发送一些数据。为此,我有一个 Activity,它在选择项目后执行 AsyncTask。

以下是一些简化的示例代码,以降低演示的复杂性。sendDataToWebService() 方法在选择事件上被调用:

我试图解释用户开始将数据发送到 Web 服务但随后在传输过程中收到来电的情况。当来电事件发生时,会调用活动的 onPause 方法,但因为我的传输发生在 AsyncTask 中,所以即使 onPause 完成,AsyncTask 线程也会继续。

所以我想知道处理这种情况的最佳方法是什么?我让它 AsyncTask 继续运行吗?我是否监听来电事件并尝试取消 AsyncTask?

用于传输的无线电(WiFi 或蜂窝网络)对此有何影响?我相信一些运营商(例如Verizon)不允许在电话交谈期间通过他们的手机网络传输数据。WiFi会以某种方式受到电话的影响吗?

将其迁移到服务组件中的线程会有所不同吗?

0 投票
1 回答
277 浏览

android - onsaveinstance() 方法包中的数据存储在设备上的什么位置?

1) onsaveinstance() 方法包中的数据存储在设备上的什么位置?它是存储在 data/data 目录中还是存储在 sqlite DB 或其他地方?

0 投票
8 回答
55028 浏览

android - Android Activity 的 onPause() 和 onStop() 有什么区别?

从这里的 android 文档http://developer.android.com/reference/android/app/Activity.html,它说“活动进入前台”将调用onPause(),“活动不再可见”将调用onStop()

“活动进入前台”与“活动不再可见”不一样吗?你能告诉我它们之间有什么区别吗?

0 投票
2 回答
2778 浏览

android - Android-为什么会发生这种情况(“尚未创建内容”错误)

这是对这个问题的跟进:Android - 为什么这告诉我“尚未创建内容视图”?

因此,以下代码会引发错误:

但是,如果我在布局中添加一个按钮并将代码放在 OnClick 方法中,它会完美运行。像这样:

为什么会发生这种情况。我知道它必须与片段生命周期有关,但是什么?我该如何规避这一点,以便在片段打开时填充列表列表视图,而不仅仅是在我单击按钮时?

谢谢

编辑:这是主要活动

和片段 XML