2015-12-31 3 views
2

У меня есть асинтекс, чтобы проверить доступ к Интернету, но иногда он не запускается. Поэтому я был бы признателен, если бы объяснил мне это странное поведение.Почему asynctask выполняется один раз, даже если, я закрываю аппликацию?

это мой код:

if(activeNetworkinfo.getType()==ConnectivityManager.TYPE_WIFI){ 
         if(NetworkPrivider()){ 

         //this is my asyntask with weird behavior,and always enter here. 

          CheckInternetAccess ch=new CheckInternetAccess(); 
          ch.execute(); 
          Log.i("sms", "Esta conetado a wifi"); 
         }else{ 
          mycallback.QuePaso(MainActivity.LOCALIZACION_APAGADA_WIFI); 
         } 

        }if(activeNetworkinfo.getType()==ConnectivityManager.TYPE_MOBILE){ 
        Log.i("sms", "Esta conetado a datos"); 
         if(GpsON()){ 
          CheckInternetAccess ch=new CheckInternetAccess(); 
          ch.execute(); 
         }else{ 
          mycallback.QuePaso(MainActivity.LOCALIZACION_APAGADA_GPS); 
         } 

        } 

и это мой asyntask:

 public class CheckInternetAccess extends AsyncTask<Void, Void, Boolean> { 

     //http://clients3.google.com/generate_204 
     @Override 
     protected Boolean doInBackground(Void... params) { 
      Log.i("sms", "Checando acceso a internet..."); 
      try { 
       HttpURLConnection urlc = (HttpURLConnection) 
         (new URL("http://clients3.google.com/generate_204") 
           .openConnection()); 
       urlc.setRequestProperty("User-Agent", "Android"); 
       urlc.setRequestProperty("Connection", "close"); 
       urlc.setConnectTimeout(1000); 
       urlc.connect(); 
       return (urlc.getResponseCode() == 204 && urlc.getContentLength() == 0); 
      }catch (SocketTimeoutException ex){ 
       Log.e("ChecarInternet: ", "Error esperando", ex); 

       cancel(true); 
      }catch (ConnectException e) { 
       Log.e("ChecarInternet: ", "Sin acceso a internet", e); 
       cancel(true); 
      } catch (Exception e) { 
       Log.e("ChecarInternet: ", "Error checking internet connection", e); 
       cancel(true); 
      } 
      return false; 
     } 
@Override 
    protected void onPostExecute(Boolean result) { 

if(result){ 
//do someting. 
} 
} 
} 

когда я устанавливаю-анкету asyntask выполняется, но если я закрыть-анкету и я снова открыт уже не выполняйте asynctask до этого, я удаляю данные приложения или устанавливаю снова. иногда выполняется нормально.

+0

Является ли это в OnCreate метод? когда вы говорите близко, вы имеете в виду, что вы убиваете приложение или это просто вне экрана? вы можете вызвать это в onResume(). –

+0

в методе oncreate вызывает класс, и этот класс имеет asyntask и интерфейс, который я реализую в activitymain, поэтому, когда результат asyntask равен true, выполните calback к моей mainactivity в строке «// do someting». и когда я закрываю аппликацию, я хочу полностью уничтожить. и я сожалею о своем английском, но я из mexico .. –

ответ

0

Используйте этот способ,

class MyActivity { 
    CheckInternetAccess ch; 

    void someMethod() { 
     ch = new CheckInternetAccess(); 
     ch.execute(); 
    } 

    void onPause() { // Activitys onPause 
     if (ch != null) { 
      ch.cancel(true); 
     } 
    } 
} 
+0

, но моя асинтеза не работает, моя асинтеза - это простой класс, как вы думаете, это работает? –

+0

есть. затем найдите, какое приложение использует эту асинтезу. и отменить в случае необходимости. –

+0

В чем разница между ch.cancel(); и отменить (true); , потому что я отменяю, когда произошла ошибка исключения –

 Смежные вопросы

  • Нет связанных вопросов^_^