重启后黑屏

时间:2013-08-15 11:55:31

标签: android android-intent admob

我在app重新启动时出现了一个奇怪的黑屏问题,因为在Play商店开发者控制台中,用户报告的应用程序暂时没有使用带有非常奇怪的堆栈跟踪的ANR:

----- pid 2704 at 2013-08-15 09:08:32 -----
Cmd line: system_server

DALVIK THREADS:
(mutexes: tll=0 tsl=0 tscl=0 ghl=0 hwl=0 hwll=0)
"main" prio=5 tid=1 NATIVE
  | group="main" sCount=1 dsCount=0 obj=0x400281b8 self=0xd088
  | sysTid=2704 nice=0 sched=0/0 cgrp=default handle=-1345006464
  | schedstat=( 29713532638 35237133707 131286 )
  at com.android.server.SystemServer.init1(Native Method)
  at com.android.server.SystemServer.main(SystemServer.java:918)
  at java.lang.reflect.Method.invokeNative(Native Method)
  at java.lang.reflect.Method.invoke(Method.java:507)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(...)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
  at dalvik.system.NativeStart.main(Native Method)
 ...

并且没有涉及应用代码的线程。我可以在我的一个测试设备上重现它,但它非常随机,并且需要很长时间才能遇到错误。但是,如果我能够在启动应用程序后立即在设备的日志中收到以下消息:

I/ActivityManager( 2704): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.example.client.android/.ExampleMainActivity bnds=[125,494][235,632] } from pid 2908
W/ActivityManager( 2704): Receiver during timeout: BroadcastFilter{40b8b180 ReceiverList{40b8b108 32495 com.example.client.android/10107 remote:40b34b28}}
I/ActivityManager( 2704): Skipping duplicate ANR: ProcessRecord{40bfc8c0 32495:com.example.client.android/10107} Broadcast of Intent { act=android.intent.action.SCREEN_OFF flg=0x40000000 }
W/ActivityManager( 2704): Activity idle timeout for HistoryRecord{40578b78 com.example.client.android/.ExampleMainActivity}

我已经在谷歌上搜索过,并在StackOverflow上发现了以下有关这些消息的帖子:

Activity idle timeout for HistoryRecord?

Activity idle timeout for HistoryRecord

谷歌小组中的以下帖子:

https://groups.google.com/forum/?fromgroups#!topic/android-developers/TfkPlN5b-ig

我检查了服务,如果在BroadcastReceivers的onReceive中有任何重量级,但没有找到任何东西。

我们使用OnGlobalChangeLayoutListener,它应用View.invalidate()来处理WebView重绘问题,这可能会导致绘制循环。我删除了它但仍然遇到了问题。

任何人都可能遇到同样的问题,并且知道如何修复它或隔离它?我在这里几乎没有想法,我很想知道这里发生了什么。

更新

我忘了提一下:如果发生黑屏问题,那么将应用程序排除在外的唯一方法是强制停止申请流程。否则,每次我尝试启动应用程序时都会记录日志行。

更新2

根据要求更详细地描述正在发生的事情:黑屏非常随机发生。它总是发生在应用程序的开始,如果发生只有一个强制停止让应用程序从此。它似乎只是在应用程序没有使用更长时间之后才发生,并且可能已经换掉了内存。看起来只有Android 2.x设备会受到影响,尽管我对此并不确定。

更新3

我添加了一个调用android.os.Process.killProcess(Process.myPid());的按钮,如果我再次调用它,我可以在一段时间后重现它,启动应用程序并使用按钮退出。经过一段时间(相当随机),我在使用按钮退出后立即得到了这个:

E/JavaBinder( 2704): !!! FAILED BINDER TRANSACTION !!!

然后是:

W/ActivityManager( 2704): Activity pause timeout for HistoryRecord{40976dd8 com.example.client.android/.ExampleMainActivity}

下次我重启应用程序时,我只得到一个黑屏和上面提到的日志消息。我一直无法用android 4.1设备重现相同的功能,只能使用两个2.3设备。

在Google上搜索我发现了这个:

http://androiddiscuss.com/1-android-discuss/42614.html

建议绑定器事务缓冲区有点用尽。我们使用MediaPlayer,InApp-Billing和使用绑定的Google Cloud Messages。我删除了所有这些并仍然遇到此错误。也许有人知道其他隐藏的活页夹相关的东西要检查?

1 个答案:

答案 0 :(得分:0)

我终于能够识别出错误的组件:我最近将使用过的Admob-SDK从6.2.1更新到6.4.1,并且自更新以来黑屏(以及Java-Binder消息)发生了。回滚到6.2.1解决了这个问题。