问题标签 [android-configchanges]
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.
java - Service 与 AsyncTask 处理配置更改和 TCP 连接
情况是这样的:我的应用程序有一个活动,处理一个持久的 TCP 连接并使用很多东西动态更新 UI(对象的哈希表、按钮、ArrayLists、适配器......)。目前,我使用 AsyncTask 处理连接,并寻找一种保存方法:
- 连接
- 所有变量,例如动态创建的视图
当屏幕旋转或用户接到电话时,我发现:http : //www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html 对我来说看起来很酷。但我也到处读到我应该使用服务,因为它更适合长期的 TCP 连接。为什么选择异步任务:
- 看起来我可以使用片段保存 TCP 连接
- 无论如何,我都必须做类似的事情,以便从旋转/调用中保存对象、按钮等
- 我只有一项需要连接的活动(服务是否指示不止一项?)
为什么服务:
- 不需要使用 Fragments 来保存 TCP 连接(是真的吗?什么样的服务,正常,IntentService,因为我只有一个客户端,或者有界,我应该使用来执行此操作吗?)
- 更适合长期连接
当我说“服务”时,我假设无论如何我都必须在服务中运行 AsyncTask,因此它不会处理主要活动上的连接。我该怎么办?
android - 屏幕旋转后无法从新的 ResultReceiver 修改 UI
我很绝望。情况就是这样:我有一项活动和一项服务。从服务到活动的通信依赖于一个非常简单的 ResultReceiver。
一切正常:活动接收异步消息并成功更新 UI。但是如果我旋转屏幕,我会失去连接:我知道“旧的”ResultReceiver 丢失了,我很好,问题是我创建了一个新的 ResultReceiver 并将其发送到服务。我在创建时这样做:
和服务:
每次旋转屏幕时都会成功打印“REBIND”。serviceReceiver 是我发送东西的地方:如果我将它设置为 null onRebind(但不是 onStartCommand 或 onBind,所以我确定这发生在配置更改之后),当我尝试发送东西时,我会获得一个 nullpointerexception,所以我猜它实际上得到了更新(即从新活动中获取“新”ResultReceiver)。
我不想“保存”旧的 ResultReceiver 并在重新创建活动时“重新连接”它;我可以创建一个新的 ResultReceiver 并将其传递给 onRebind() 服务,该服务将对其进行更新。但它不起作用。
屏幕旋转和重新绑定后,“新”ResultReceiver 的 onReceiveResult() 无法访问 UI - 它更改的内容不会显示。我不知道在哪里寻找错误:在屏幕旋转之前一切正常,所以它必须与服务持有对旧事物的引用有关,我猜。
android - 当方向改变时,不要重新加载活动并以正确的顺序放置片段
我在我的应用程序中使用了framgents,并且我在平板电脑上具有横向(左右)和纵向(上下)的双窗格布局。
我有一个将片段加载到左侧选择窗格中的活动,然后您可以在某些 Spinner 中选择多个条件进行搜索。在右侧的片段中显示了 ListView 中的搜索结果。
如果我android:configChanges="orientation"
在 Manifest.xml 中的此活动中使用搜索结果,则会保存搜索结果,但我在横向模式下上下都有窗格布局,而不是应该的左右。如果我不使用android:configChanges="orientation"
,我的两个窗格布局都是正确的(横向模式下的左右),但我没有搜索结果,活动重新启动。
我该如何解决?任何想法?
非常感谢。
android - 方向更改后使用 Google 登录的 Android 中的多个权限对话框
我一直在努力解决这个问题——我在这里广泛搜索了答案,但没有找到任何答案(如果我错过了一个解决方案,请道歉)。我正在实现“使用 Google 登录”按钮/逻辑,除了更改设备方向外,一切正常。在这种情况下,我会看到 Google 权限对话框的多个副本。(因此,如果我更改了 3 次方向,则在返回到原始屏幕之前,我必须取消权限对话框的三个副本)。(可以在此处找到权限对话框的示例)。
我以为我的代码过于复杂,所以我做了一个新活动,只使用了 Google 教程页面(入门/登录)中的代码,但我仍然遇到同样的问题。(代码如下)
(FWIW,我还尝试使用 IntelliJ 的“New --> Activity --> Login Activity”选项创建一个新的 Activity,结果相同。)
除此之外,我尝试运行 Google 的“快速入门”应用程序,是的,同样的问题仍在发生!
有没有其他人在没有这种行为的情况下成功实现了“使用 Google 登录”?我想作为最后的手段,我可以强制我的身份验证活动始终以纵向显示,但我正在尝试查看是否有除此之外的解决方案。
先感谢您!
以下是我的“简化”活动中的代码:
android - 为设备构建 Android 操作系统
我正在尝试构建 Android 操作系统。我已经设置好我的机器,一切正常,但是选择设备配置是我关心的问题。当我输入午餐时,我得到:
我有一个名为 Injoo 1s 的设备,这就是我想用来测试的设备。如何选择哪种配置。或者,我必须编写一些代码来解决这个问题。您的回复将不胜感激。谢谢你。
android - 以编程方式设置方向,没有活动娱乐?
每当我使用setRequestedOrientation(int)
它时,它的行为与我在Manifest.xml
. (这是预期的)
我读到(来自文档):
如果 Activity 当前处于前台或以其他方式影响屏幕方向,则屏幕将立即更改(可能导致 Activity 重新启动)
实际上,这意味着每当启动应用程序时,虽然设备的方向不是将设置的方向setRequestedOrientation(int)
,但活动将被创建两次(一次“正常”,一次反映请求的方向)。
到目前为止,让我的活动 100% 配置更改证明是不值得的,我想要的是一种在代码中设置请求方向的方法,而不必两次创建我的活动。有办法吗?
(最好不要使用骇人听闻的解决方法,例如在 configChanges 中设置 'orientation' 标志)
编辑:
接受的答案是正确的,它根本不合逻辑(没有意义)。对于新读者,我所做的是添加一个 stub-activity (主要是没有太多作用的空活动)。它所做的只是getRequestedOrientation()
在它与我想要的不同时使用,我将调用setRequestedOrientation(int)
,否则启动我想要的活动并在其 onCreate 中还调用 以setRequestedOrientation(int)
使其保持在请求的方向。
android - 在配置更改时停止片段重新创建(纵向和横向的不同布局)
这是我的平板电脑纵向和横向的布局设计
- 纵向布局
- 菜单导航抽屉和
- 内容片段
- 横向布局(双窗格)
- 左侧的菜单片段
- 右侧的内容片段
我正在使用导航抽屉的支持库android.support.v4.widget.DrawerLayout
用例:
- 应用程序以横向模式启动
- 横向布局 - 双窗格膨胀并加载数据
- 方向改变
- 菜单片段被破坏和分离
- 纵向布局 - 内容片段膨胀的导航抽屉
- 导航抽屉附加到活动并立即分离
- * 因为横向菜单片段由系统重新创建并附加到活动。*
- 应用程序崩溃,因为导航抽屉已分离
我尝试了stackoverflow 用户goRGon建议的解决方案,它似乎有效。
但是需要您的建议,这是否是停止片段重新创建的最佳方式?
android - Android vs 配置改变
我为我的英语道歉,但用谷歌翻译。我想了解为什么带有 Android 的 Google 会在每次更改时重新启动活动,而您会丢失所有显示的数据。你怎么解决这个问题?难道他们不能让它成为可选的吗?在我阅读的每个论坛上,我都会使用 onSaveInstanceState、onRestoreInstanceState、onConfigurationChanged 方法,但没有很好地解释如何使用它们。如果我有一个复杂的应用程序,有很多对象,有 EditText,有标记,多边形,我不得不用临时变量手动保存所有东西?还有另一种更快更容易的方法吗?你有什么实际的例子可以给我看吗?希望各位知道的帮我理解一下,谢谢大家。
android - ActivityInfo.SCREEN_ORIENTATION_LOCKED 未锁定方向 - Android
这是 API 18 中的一个功能,我无法让它真正锁定。我一直在阅读如何手动处理自己的配置更改,并尝试了很多东西,但我目前的代码无效。
目标:我需要有一个活动,在用户拍摄视频(将他们带回应用程序)后,着陆页应该是横向或纵向的,无论用户以哪种方式握住手机。但是如果他们决定去横向,我想锁定那个位置,所以他们不能回到纵向(如果他们回去会导致视频观看错误)。所以他们一开始有一个选择,但如果他们选择那个,就必须留在风景中。但是我该怎么做呢?
这是我到目前为止所尝试的:
将其
android:configChanges="keyboardHidden|orientation|screenSize"
放在<activity>
清单中我的活动标签中。用这个覆盖
/li>onConfigurationChanged()
方法:我有 2 种 xml 布局,一种用于布局文件夹中的肖像,另一种用于 layout-land 文件夹中的风景。
我得到的结果是我可以让布局在方向改变时显示,但我不能让它锁定。我正在使用带有 的设备KitKat
,所以它应该锁定在那里,但它没有。
我在这里读过的关于锁定方向(或解决方法)的每一篇文章似乎都有 3 或 4 年的历史,并且基本上暗示了我已经在尝试的内容。任何人有任何新信息吗?
谢谢。