Google Play服务5.0.77

时间:2014-06-27 17:33:05

标签: android admob google-play-services

从6月25日开始,两个使用广告的无关应用开始拥有此NPE

java.lang.NullPointerException
   at zo.a(SourceFile:172)
   at aeh.a(SourceFile:120)
   at afw.run(SourceFile:14)
   at afy.run(SourceFile:30)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
   at java.lang.Thread.run(Thread.java:856)

我认为这与谷歌播放服务更新有关。有人能帮我解决这个问题吗?

为了确认这个问题与播放服务有关,我已经设法从一个名为AdWorker的线程中的crashlytics中获取此信息:

thread
   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor(Thread.java:1231)
   at sun.misc.Unsafe.park(Unsafe.java:323)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:813)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:973)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1282)
   at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:207)
   at zo.a(SourceFile:147)
   at zo.a(SourceFile:170)
   at aeh.a(SourceFile:120)
   at afw.run(SourceFile:14)
   at afy.run(SourceFile:30)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
   at java.lang.Thread.run(Thread.java:856)

它不是正确的地方......但是根本没有地方报告它们

它从7月1日开始翻倍的例外数量,现在几乎是6月27日的3倍。

Issue on android google code project

现在讨论的内容是admob google Heading group

谷歌的最后回复"我们已经意识到这些崩溃并正在修复。我们希望在接下来的一两周内推出这些修复程序。" (7月7日)

10 个答案:

答案 0 :(得分:11)

Mateusz Matela在https://groups.google.com/forum/#!topic/google-admob-ads-sdk/DkjtCx_Zvn8找到了这个解决方案。

我曾试过摩托罗拉DEFY +三次中有两次从这个bug中崩溃。即使在日志中出现与此错误相关的警告,它似乎也能正常工作。它甚至说" AdWorker线程抛出异常"。在继续使用该应用时,我的广告甚至会重新出现。

final UncaughtExceptionHandler defaultHandler = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
        @Override
        public void uncaughtException(Thread thread, Throwable ex) {
            if (thread.getName().startsWith("AdWorker")) {
                Log.w("ADMOB", "AdWorker thread thrown an exception.", ex);
            } else if (defaultHandler != null) {
                defaultHandler.uncaughtException(thread, ex);
            } else {
                throw new RuntimeException("No default uncaught exception handler.", ex);
            }
        }
});

答案 1 :(得分:4)

今天,Google发布了这个帖子:http://android-developers.blogspot.fr/2014/07/google-play-services-5.html

现在它对我有用。只需再次尝试更新移动设备中的GooglePlayService并更新您的ADT。

修改:

检查GPS版本的代码:

// Check if GooglePlay Service is good;
            resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this.getActivity());
            if (resultCode != ConnectionResult.SUCCESS) {
                if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) {
                    GooglePlayServicesUtil.getErrorDialog(resultCode, this.getActivity(), 1).show();
                    rootView = inflater.inflate(R.layout.fragment_googleplayerror, container, false);
                    return rootView;
                } else {
                    Log.i(Tag, "This device is not supported.");
                    getActivity().finish();
                }
            }

答案 2 :(得分:2)

在将admob更新为谷歌播放服务后,我在不同的Android版本上得到完全相同的错误。 我认为它无法在用户端解决。

答案 3 :(得分:2)

它与Play服务更新有关,请参阅下面的示例崩溃日志。由于它在onCreate上崩溃,当用户点击广告或特定类型的广告时可能会发生这种情况

USER_COMMENT=
ANDROID_VERSION=4.1.2
APP_VERSION_NAME=8.9
BRAND=samsung
PHONE_MODEL=GT-I9100
CUSTOM_DATA=
STACK_TRACE=java.lang.RuntimeException: Unable to start activity ComponentInfo{xxxxx/com.google.android.gms.ads.AdActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
at android.app.ActivityThread.access$700(ActivityThread.java:140)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4921)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at acm.a(SourceFile:215)
at acz.onTransact(SourceFile:58)
at android.os.Binder.transact(Binder.java:326)
at com.google.android.gms.internal.ck$a$a.onCreate(Unknown Source)
at com.google.android.gms.ads.AdActivity.onCreate(Unknown Source)
at android.app.Activity.performCreate(Activity.java:5206)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
... 11 more
java.lang.NullPointerException
at acm.a(SourceFile:215)
at acz.onTransact(SourceFile:58)
at android.os.Binder.transact(Binder.java:326)
at com.google.android.gms.internal.ck$a$a.onCreate(Unknown Source)
at com.google.android.gms.ads.AdActivity.onCreate(Unknown Source)
at android.app.Activity.performCreate(Activity.java:5206)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
at android.app.ActivityThread.access$700(ActivityThread.java:140)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4921)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
at dalvik.system.NativeStart.main(Native Method)

答案 4 :(得分:1)

自6月25日以来,我的一个应用程序也遇到了完全相同的问题。你是对的这是一个谷歌问题,我想我已经设法通过将我的Android支持库更新到版本20(我使用的是android-support-v4.jar)和我的Google Play服务版本来解决它。

我不确定这两个版本中的哪一个解决了这个问题,但它已经24小时了,而且崩溃报告已经停止。

编辑: 对不起,这仍然没有解决。但我得到了AdMod SDK团队的回复,他们正在调查它。 https://groups.google.com/forum/#!topic/google-admob-ads-sdk/DkjtCx_Zvn8

答案 5 :(得分:1)

这是一个部分解决方案,似乎(到目前为止)修复100%的崩溃:你应该推迟广告请求几毫秒,以避免这次崩溃!

简化示例:

    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            AdRequest adRequest = new AdRequest.Builder().build();
            adView.loadAd(adRequest);
            super.handleMessage(msg);
        }
    };

    if (handler != null) {
        handler.sendEmptyMessageDelayed(0, 200);
    }

答案 6 :(得分:1)

我发现了一种解决方法。

就我而言,我是在自定义流程中运行的服务中展示广告。例如:

    <service
        android:name="com.example.MyService"
        android:exported="false"
        android:process=":svc" 
        />

在我的AndroidManifest.xml中,我为声明的AdActivity设置了相同的android:process属性,问题就消失了。

    <activity
        android:name="com.google.android.gms.ads.AdActivity"
        android:process=":svc"
        android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" 
        />

就我的申请而言,我并不特别关注广告活动在哪个流程中运行,因此这种解决方法就足够了。希望这对其他人有用。

答案 7 :(得分:0)

我找到了暂时的半解决方案。我对延迟广告请求使用 thiagolr 建议:

    Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        AdRequest adRequest = new AdRequest.Builder().build();
        adView.loadAd(adRequest);
        super.handleMessage(msg);
    }
};

if (handler != null) {
    handler.sendEmptyMessageDelayed(0, 200);
}

我还删除了onResume和onPause方法,所以我不知道哪种解决方案对我有帮助, 但在此解决方法之前,我每天在zo.a(SourceFile:172)处有100-130个java.lang.NullPointerException。在此解决方法之后,我每天有6-10个NullPointerException。如果您愿意,可以单独尝试这些解决方案来定义哪些有用。

我在活动中移除的方法:

//    @Override
//    public void onPause() {
//      adView.pause();
//      super.onPause();
//    }
//
//    @Override
//    public void onResume() {
//      super.onResume();
//      adView.resume();
//    }

答案 8 :(得分:0)

根据:https://groups.google.com/forum/#!topic/google-admob-ads-sdk/DkjtCx_Zvn8

有些人通过添加android:theme =&#34; @android:style / Theme.Translucent&#34;取得了成功。活动android:name =&#34; com.google.android.gms.ads.AdActivity&#34;在清单中。

我现在正在使用该修复程序推出新版本。如果有帮助的话会在几天后看到。

答案 9 :(得分:0)

转到使用其他广告sdk。我尝试了大部分提到的事情,错误仍然存​​在。 我个人不喜欢在代码中应用这些黑客。所以决定转而使用谷歌广告sdk崩溃和错误。