相关疑难解决方法(0)

屏幕关闭时,时髦的Android活动行为?

当android关闭屏幕并锁定屏幕时,我看到一些有趣的活动流程...我的应用程序通过常规流程,onCreate,onStart和onResume.然后,我让手机坐在那里.当屏幕变黑时,会调用onPause.没关系.然后5秒钟,应用程序被杀死(onStop,onDestroy).那也没关系.但是在调用onDestroy后立即调用onCreate,onStart和onResume,即使屏幕为空,也会重新启动应用程序.该应用程序有一个加载时间,并在它启动时播放声音,所以当你在30秒前放下的手机开始播放声音时,这有点令人毛骨悚然.为什么android会杀死应用程序然后重启它?目标是2.1更新,手机是三星Captivate.其他人看到这个,并知道一种方法来阻止它?

android screen android-activity

8
推荐指数
1
解决办法
4410
查看次数

Android:手动屏幕方向而不重新启动活动?

我需要制作一个应用程序播放带有全屏视频按钮的视频.该按钮用于在视频显示的横向和纵向之间手动切换.我们不希望自动旋转检测.因此Manifest文件设置如下.

<activity
    android:name=".VideoActivity"
    android:screenOrientation="portrait"
    android:configChanges="keyboardHidden"/>
Run Code Online (Sandbox Code Playgroud)

我用了

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); 要么 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);

手动设置方向.它工作但它重新启动活动 - 发现onCreate()被调用.因此视频播放意外地从头开始重新开始.我不能像使用一样平滑onConfigurationChanged()- 自动旋转检测方法.

那么如何在不重新启动活动的情况下更改手动屏幕方向?

谢谢.

android restart manual orientation android-activity

8
推荐指数
1
解决办法
9692
查看次数

如何在配置更改和启动活动时避免重新加载Admob广告?

这里使用横幅样本,我注意到如果我改变方向,广告就会消失,然后重新加载(需要时间),所以每当我改变方向时,都会有时间显示任何内容.

我知道可以通过清单为活动设置configChanges(实际上它可以工作),但这不是一般的建议.它有多个缺陷:

  1. 在我的情况下,例如,更改方向让工具栏保持在相同的高度,这是错误的,因为它应该在横向上不同于在肖像上.
  2. 转到另一个活动Admob视图仍然会重新加载,即使之前已加载.
  3. 从纵向到横向,反之亦然,广告无法很好地适应新的方向.

在每次配置更改时,还可以采取哪些措施来避免重新加载广告?

我希望Admob一次加载广告(其余部分在后台加载新广告),然后展示,并避免在我更改方向时重新加载.每次到达时,只显示当前配置(例如方向)的最佳状态.

转到包含Admob广告的新活动也是如此.如果之前加载,则无需重新加载.


编辑:我对此表示赞赏,因为Google/Firebase支持通过电子邮件告诉我,实际上可以缓存广告:

广告SDK不会为您缓存广告,但您可以实施"AdManager"样式类,很可能是单个应用程序或附加到应用程序实例的实例,可以为您管理缓存.

当您认识到它是一种Android模式来销毁和重新创建方向上的活动时,实例状态通常通过包保存和恢复,但这不适用于视图.

如果您希望在此方案中优化横幅广告视图的重新加载时间,我建议您通过AdManager类制作广告请求,然后AdManager可以应用一些逻辑来缓存广告,例如您的横幅广告视图一段时间,并返回上一个横幅,如果它对新请求仍然有效(您将在方向更改时进行).

而且:

SDK没有实现缓存广告的这种想法,因为很难确定在所有情况下应用的最佳缓存逻辑,因此如果需要,开发人员可以实现适合其用例的缓存.

可能有一个与'AdView'类分离的横幅广告会产生更合适的可缓存对象,但目前情况并非如此.

因此,我们建议您为了预取/缓存横幅广告,您需要存储"AdView".然而,另一种支持且确实推荐的方法是使用ViewModel,而不是使用AdManager,请参阅 https://developer.android.com/guide/topics/resources/runtime-changes#RetainingAnObjecthttps://developer.android .com/topic/libraries/architecture/viewmodel.这些都是针对这种用例而设计的.

如果确实有可能,我想知道如何做到这一点.请成功执行此操作的人员,在代码中显示可以执行的操作.

android orientation admob

8
推荐指数
1
解决办法
469
查看次数

Android NDK:重启活动后如何清理本机代码?

所有,

我知道默认情况下,当屏幕方向改变或键盘滑入或滑出时,活动将被终止并重新启动.(请参阅Android上的活动重启).我的问题是,从Native代码的角度处理这个问题的正确方法是什么?例如,如果我有一个静态块加载本机库并且我的应用程序重新启动,我如何确保本地的任何内存都得到适当处理?问题是

当我们旋转设备时,它看起来像是创建了一个单独的线程池,并且永远不会删除旧的线程池.这意味着每当有人转动设备时,我们就会有更多线程闲置并占用内存

我如何确保不会发生这种情况?我从JNIExample页面看到底部的一些注释:

[*]未解决的问题和错误尽管该示例功能齐全,但仍有一些未解决的问题,到目前为止我无法弄清楚.启动活动时出现问题,然后按"返回"按钮将其隐藏,然后再次启动.根据我的经验,在这种重新启动的活动中调用本机函数将会失败.callVoid()只是因为分段错误而崩溃,而对getNewData()和getDataString()的调用会导致JVM因错误而中止,因为它对全局缓存的对象引用不再满意.看起来活动重启会以某种方式使我们的缓存对象引用无效,即使它们受NewGlobalRef()保护,并且活动在原始JVM中运行(活动重启并不意味着JVM本身已重新启动).我没有很好的解释为什么会发生这种情况,所以如果您有任何想法,请告诉我.

这已经解决了吗?

java java-native-interface android native android-ndk

7
推荐指数
1
解决办法
3611
查看次数

Android应用程序在方向更改时重新启动

当我更改方向应用程序重新启动并且我丢失了当前数据时...我正在使用包含大量活动的活动组,当我从主要活动更改方向应用程序重新启动时.

是否可以避免此应用程序在方向更改时重新启动?

有人知道请让我知道..

android

7
推荐指数
2
解决办法
2万
查看次数

处理Android中的显示旋转

我是Android的新手.在我的应用程序开发中,我想处理显示(屏幕)旋转.是否有任何听众可以处理此事件?或者有没有其他方法来处理这种情况?

感谢和问候,

巴拉

android

7
推荐指数
1
解决办法
1万
查看次数

如何在没有重新启动的情况下在活动之间共享服务?

我正在使用SDK编写SIP应用程序.我的应用程序有很多活动,因此我使用服务的onCreate和onDestroy方法初始化和关闭SDK,以便我可以在应用程序的持续时间内运行它(而不仅仅是单个Activity).

我正在使用的示例应用程序调用startService然后泄漏服务 - 我不想这样做但我不确定我有替代方案.

我会喜欢做的是绑定到我的活动基类的OnCreate方法使用Context.BIND_AUTO_CREATE服务和取消绑定的OnDestroy.我的所有活动都从此延伸,因此我将在所有活动中提供服务.

但是,当配置发生变化或切换活动时会发生什么?服务是否会活动之间的短暂时间内被激活,或者是否保证不会?如果是前者,那么服务的使用是否会略微瘫痪?什么样的设计模式,我应该使用,使一些坚持正是我的应用程序的生命周期?

android android-service android-activity

6
推荐指数
1
解决办法
2175
查看次数

Android:如何防止打开物理键盘重新启动应用程序

android:screenOrientation="portait"打开了,但是当打开物理键盘时,它不会按照我想要的方式旋转屏幕,但会重新启动应用程序。它似乎再次运行 onCreate 之类的。有人可以指出我正确的方向和/或告诉我如何拦截并处理它吗?谢谢。

keyboard android

5
推荐指数
1
解决办法
1331
查看次数

方向更改后保持当前选项卡Actionbar Android

在我的应用程序中,当方向更改时,操作栏中的选定选项卡设置为第一个,我希望它保留在选定的选项卡上,而不是跳转到第一个选项卡...

android android-actionbar

5
推荐指数
1
解决办法
3980
查看次数

让一项活动在轮换中被摧毁有什么好处?

我使用了两种方法:

  1. 让活动在轮换时被销毁
  2. 不要让活动在轮换时被破坏

我的方法几乎每次都是捕获旋转事件,如果需要调用setContentView并再次添加一些组件.如果没有,只需让它旋转,布局设计适应.

到目前为止,我只看到了在具有非常动态的非常复杂结构的屏幕上销毁它的优点,并且每当我旋转而不是破坏时,在重新构建屏幕时显示出一些闪烁.

必须通过onSaveInstance,onRestoreInstace传递状态的开销有时非常容易出错,并且不知何故耗时.

我错过了什么吗?

更新:

我的代码中没有"Orientation.XPTO == ...".这是两种方法中的每一种的逻辑(代码被重用):

在摧毁时

onCreate -> DrawUI() setContentView and add views -> fill() add content
Run Code Online (Sandbox Code Playgroud)

不销毁时:

onCreate -> DrawUI() setContentView and add views -> fill() add content
onRotation -> DrawUI() setContentView and add views -> fill() add content
Run Code Online (Sandbox Code Playgroud)

在轮换后调用setContentView时,它将为设备方向选择正确的布局(通过Google的Reto Meier检查此答案/sf/answers/31984291/)

并且DrawUI和fill必须具有纵向和横向布局的逻辑,因为可以在两个方向中的每一个上创建活动以开始.

android rotation

5
推荐指数
1
解决办法
2095
查看次数