La aplicación de Android no se cierra después de llamar a System.exit (0)

Tengo una aplicación de Android que funcionó bien, antes de añadir actividad de admob. Estoy cerrando mi aplicación con el proceso de matar (llamando a System.exit (0)). Sé que esta es la peor solución de terminar la aplicación. Estoy trabajando con los estados de OpenGL y el framefork de libgdx, así que no puedo fijar toda la filtración de la memoria que aparece cuando llamo la función androide estándar del final ().

Así que aquí está el problema:

Mi aplicación funciona normalmente varias veces. Cierro y empiezo una y otra vez. Todo funciona bien, pero de repente la vista de admob no aparece y cuando estoy tratando de cerrar, se congela. El sonido funciona, la última pantalla se muestra, pero tocar no funciona.

Cuando estoy matando el proceso por administrador de tareas, la música sigue jugando. Incluso cuando completamente eliminar la aplicación, la música sigue jugando, por lo que la actividad sigue funcionando. Se detiene sólo cuando reinicio mi teléfono.

Sin admob todo funciona bien. También intento destruir adView antes de cerrar, sin resultado.

Aquí está mi actividad principal:

public class ControllerActivity extends AndroidApplication{ private AdView adView; RelativeLayout layout; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration(); cfg.useGL20 = true; cfg.useCompass = false; cfg.useAccelerometer = false; layout = new RelativeLayout(this); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); View gameView = initializeForView(Controller.getInstance(), cfg); adView = new AdView(this, AdSize.BANNER, "MYID"); AdRequest adRequest=new AdRequest(); adView.loadAd(adRequest); layout.addView(gameView); RelativeLayout.LayoutParams adParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); adParams.addRule(RelativeLayout.ALIGN_PARENT_TOP); adParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); layout.addView(adView, adParams); setContentView(layout); } @Override public void onDestroy() { if (adView!=null) { adView.stopLoading(); adView.destroy(); } System.exit(0); super.onDestroy(); } } 

¿Tiene sus ideas, cómo matar por completo este proceso?

He descubierto algunos hechos. Si la aplicación se termina por System.exit(0) o por android.os.Process.killProcess la próxima vez que AdMob no muestre anuncios. Aún más si intenta terminar la aplicación se quedará bloqueado (el proceso permanecerá activo y la única opción para matar es el reinicio del dispositivo). La única solución es no utilizar System.exit(0) para salir de la aplicación. Cabe mencionar que no importa si se adView.destroy() o adView.stopLoading() .

He utilizado this.moveTaskToBack(true); En lugar de la terminación. Ocultará la aplicación y si en algún momento no se restaurará, Android liberará todos los recursos y AdMob funcionará correctamente. Si la aplicación será restaurada, continuará desde el mismo lugar.

He seguido las pruebas y parece que esto es un error en el AdMob SDK 6.4.1. He descargado 6.3.0 y este error ha desaparecido.

Yo suelo usar:

Android.os.Process.killProcess (android.os.Process.myPid ())

Para matar el proceso y todas las actividades que se iniciaron.

Esto es para una clase que extiende una Actividad. No estoy totalmente seguro si difiere de extender AndroidApplication

Refiera esto creo que va a funcionar.

  <com.google.ads.AdView android:id="@+id/adView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" ads:adSize="SMART_BANNER" ads:adUnitId="@string/admobid" ads:loadAdOnCreate="true" ads:testDevices="TEST_EMULATOR, TEST_DEVICE_ID" android:background="@android:color/transparent" /> 

O

Puede llamar a adView.stopLoading() en la actividad destroy.

  • Obtener (real) proceso de primer plano mediante activityManager.getRunningAppProcesses ()
  • ¿Cómo puedo abrir un Fragmento de Android en un nuevo proceso?
  • ¿Cómo puedo ver qué wakelocks están activos?
  • La actividad de un proceso muerto sigue visible en la lista después de que presionó
  • ¿Las aplicaciones que utilizan varios procesos comparten una instancia de Dalvik?
  • Android - ¿Cómo decidir si ejecutar un servicio en un proceso separado?
  • El nombre de aplicación de PackageManager siempre es nulo
  • Cada actividad en Android es un proceso o una aplicación es un proceso
  • Apertura de la cámara en un proceso diferente
  • Android - ¿Cómo obtener el processName o packageName usando PID?
  • Cualquier manera de comprobar si un proceso en ejecución es un proceso del sistema en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.