2

Android アプリケーションに広告を実装しようとしています。xml レイアウトに広告を追加したときにメモリ リークが疑われるため、この投稿で説明されているアプローチを試しました:- Admob メモリ リーク - 空のアクティビティを使用して回避する

広告がレンダリングされ、アプリの画面間でデバイスのホームボタンを誤ってクリックしてから、最近のアプリケーションに移動して自分のアプリケーションを選択すると、エラーが発生することを除いて問題はありません:-

03-22 22:17:56.604: E/AndroidRuntime(27206): Caused by: java.lang.IllegalStateException: This activity should be created only once during the entire application life
03-22 22:17:56.604: E/AndroidRuntime(27206):    at com.xyz.watch.AdMobActivity.<init>(AdMobActivity.java:16)
03-22 22:17:56.604: E/AndroidRuntime(27206):    at java.lang.Class.newInstanceImpl(Native Method)
03-22 22:17:56.604: E/AndroidRuntime(27206):    at java.lang.Class.newInstance(Class.java:1409)
03-22 22:17:56.604: E/AndroidRuntime(27206):    at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
03-22 22:17:56.604: E/AndroidRuntime(27206):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561)
03-22 22:17:56.604: E/AndroidRuntime(27206):    ... 11 more
03-22 22:17:56.684: W/System.err(27206): java.io.FileNotFoundException: /data/plog.log (Permission denied)

私の AdMobActivity の起動モードは singleInstance なので、それが理由かもしれません。これを機能させるにはどうすればよいですか?

更新:-私のコード

最初の起動アクティビティ (MainActivity) の内部

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    DatabaseAdapter databaseAdapter = new DatabaseAdapter(
            getApplicationContext());
    databaseAdapter.open();
    databaseAdapter.close();
}

    @Override
protected void onResume() {
    super.onResume();

    if (AdMobActivity.AdMobMemoryLeakWorkAroundActivity == null) {
        Log.i("CHAT", "starting the AdMobActivity");
        AdMobActivity.startAdMobActivity(this);
    }
}

AdMobActivity:-

public final class AdMobActivity extends Activity {

public static AdMobActivity AdMobMemoryLeakWorkAroundActivity;

public AdMobActivity() {
    super();
    if (AdMobMemoryLeakWorkAroundActivity != null) {
        throw new IllegalStateException("This activity should be created only once during the entire application life");
    }
    AdMobMemoryLeakWorkAroundActivity = this;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.i("CHAT", "in onCreate - AdMobActivity");
    finish();
}

public static final void startAdMobActivity(Activity activity) {
    Log.i("CHAT", "in startAdMobActivity");
    Intent i = new Intent();
    i.setComponent(new ComponentName(activity.getApplicationContext(), AdMobActivity.class));
    activity.startActivity(i);
}

}

行番号 16は

 throw new IllegalStateException("This activity should be created only once during the entire application life");
4

1 に答える 1