0

intent在我的程序中使用来共享图像和文本。

在添加 AdMob 横幅之前一切正常。程序在运行时崩溃startActivity。它不会每次都发生,但大约有30%的比例。

这是启动外部意图的代码。

private void _share(String text) {
    Log.w("A", "share");
    Intent intent=new Intent(android.content.Intent.ACTION_SEND);
    intent.setType("image/*");
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);

    File file = new File("/sdcard/dodgegame.jpg");
    intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
    intent.putExtra(Intent.EXTRA_TEXT, text);
    startActivity(Intent.createChooser(intent, "How do you want to share?"));
}

AdMob 本身运行良好。广告显示正确。似乎所有的崩溃都发生在 startActivity 和新广告同时进入 AdMob 时(不确定),因为每次崩溃时,我都可以看到 admob 日志Ads onReceiveAd()

这是崩溃时的日志:

09-15 00:23:23.540: I/Choreographer(18986): Skipped 30 frames!  The application may be doing too much work on its main thread.
09-15 00:23:33.451: I/Ads(19125): onReceiveAd()
09-15 00:23:34.232: W/A(19125): share
09-15 00:23:34.272: W/crash_handler(19125): Caught a crash, signum=11
09-15 00:23:34.272: E/webcore(19125): Report WebCore crash to the ErrorReportUtils at:Sun Sep 15 00:23:34 格林尼治标准时间+0800 2013

有没有人经历过?

在添加 AdMob 之前,意图运行良好,所以我认为这可能是 AdMob 的错误。如果是这样,我将不得不想办法暂时禁用 AdMob。

附加信息:

  1. AdMob JAR:GoogleAdMobAdsSdk-6.4.1.jar
  2. 安卓 SDK:mac-x86_64-20130729 / android-18
  3. 该函数_share是通过 JNI 从 cocos2dx 调用的(有关系吗?)
4

1 回答 1

2

最后我解决了!

意识到这是一个线程问题,startActivity在 cocos2dx 线程中被调用,我startActivity通过Handler. 并且崩溃再也没有发生过。

所以我创建了Handler一个onCreate

private Handler handler;
protected void onCreate(Bundle savedInstanceState){
    // ... blah blah
    handler = new Handler();
}

然后调用startActivityRunnable

private void share() {
    handler.post(new Runnable(){
    @Override
    public void run() {
        // ... create intent
        startActivity(intent);
    }
}
于 2013-09-16T09:58:55.047 回答