2017-03-08 9 views
0

アプリケーションが強制終了したことを検出した後、okhttp3を使用してHTTPリクエストを送信しようとしています。私は現在、Androidアプリが強制終了しているかどうかを正常に検出するコードをいくつか持っています。ただし、非同期呼び出しは機能しません。私もハンドラを使ってみましたが、運がありません。アプリケーションが終了したときにサービスで非同期httpポストを送信する方法

public class FKDService extends Service { 

    public static void setData(String param1, String param2, Boolean check) { 
     P1 = param1; 
     P2 = param2; 
     Check = check; 
    } 

    public static String P1; 
    public static String P2; 
    public static Boolean Check; 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Log.d("FKD", "Service Started"); 
     return START_NOT_STICKY; 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     Log.d("FKD", "Service Destroyed"); 
    } 

    @Override 
    public void onTaskRemoved(Intent rootIntent) { 
     final OkHttpClient client = new OkHttpClient(); 

     HttpUrl url = HttpUrl.parse("url").newBuilder() 
       .addQueryParameter("param1", P1) 
       .addQueryParameter("param2", P2) 
       .build(); 

     Log.d("FKD", url.toString()); 

     final Request req = new Request.Builder() 
       .url(url) 
       .build(); 


     client.newCall(req).enqueue(new Callback() { 
      @Override 
      public void onFailure(Call call, IOException e) { 
       Log.d("FKD", "FAIL"); 
       stopSelf(); 
      } 

      @Override 
      public void onResponse(Call call, Response response) throws IOException { 
       Log.d("FKD", "SUCCESS"); 
       stopSelf(); 
      } 
     }); 
    } 
} 
+1

OSが殺されたときに再作成されるので、START_STICKYサービスが必要です。もう一度作成すると、アプリケーションのアクティビティが現在開始されているかどうかを確認できます。そうでない場合は、HTTPコールを行うことができます。 – Avi

+0

@Aviアクティビティが存在するかどうかを確認する方法をお勧めしますか? – Bytesized

+0

詳細については、Application.ActivityLifecycleCallbacksを使用してアクティビティのライフサイクルを聴くことができます。こちら(https://developer.android.com/reference/android/app/Application.ActivityLifecycleCallbacks.html)を参照してください。 – Avi

答えて

0

私はネットワークがあなたの必要に同期のそのコールサービスを有効にするときに、あなたがするときに近いアプリ破壊サービスならば、あなたはonDestroyサービスにリクエストを送信することができます

+0

あなたのサービスがアプリプロセスのために殺されるとすぐには動作しません。破棄されたプロセスからスレッドを開始することはできません。 – Avi

0

はプロセスを同期するための放送受信機を使用しよう、と思います時間間隔

+0

私にこれの例を教えてください。ありがとうございました – Bytesized

関連する問題