2013-09-14 3 views
0

Я использую intent в моей программе для обмена изображениями и текстом.авария с admob и startActivity

Все было хорошо, пока баннер 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. Android SDK: Mac-x86_64-20130729/андроид-18
  3. Функция _share вызывается из cocos2dx с помощью JNI (это имеет значение?)
+0

где вы добавили объявления в коде? – GrIsHu

+0

Будет лучше, если вы сохраните свой код объявления в отдельном потоке из основного потока пользовательского интерфейса. – GrIsHu

ответ

2

Наконец-то я его разработал!

Понял, что проблема с резьбой, startActivity была вызвана в cocos2dx thread, я переместил startActivity в основной поток пользовательского интерфейса на Handler. И аварии никогда не случалось снова.

Так что я создал в onCreate в Handler:

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); 
    } 
} 
Смежные вопросы