0

intentプログラムで画像とテキストを共有するために使用しています。

AdMob バナーが追加されるまで、すべてが正常に機能していました。に行くとプログラムがクラッシュしstartActivityます。毎回ではありませんが、3割程度の割合です。

外部インテントを起動するためのコードを次に示します。

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. Android SDK: mac-x86_64-20130729 / android-18
  3. この関数_shareは、JNI 経由で cocos2dx から呼び出されます (それは重要ですか?)
4

1 に答える 1

2

最後に私はそれを解決しました!

これはスレッドの問題であることstartActivityに気付き、cocos2dx スレッドで呼び出され、startActivityによってメイン UI スレッドに移動しましたHandler。そして、クラッシュは二度と起こりませんでした。

だから私はで作成しHandlerましたonCreate

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

次にstartActivity、次のように呼び出しRunnableます。

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