アプリケーションが強制終了したことを検出した後、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();
}
});
}
}
OSが殺されたときに再作成されるので、START_STICKYサービスが必要です。もう一度作成すると、アプリケーションのアクティビティが現在開始されているかどうかを確認できます。そうでない場合は、HTTPコールを行うことができます。 – Avi
@Aviアクティビティが存在するかどうかを確認する方法をお勧めしますか? – Bytesized
詳細については、Application.ActivityLifecycleCallbacksを使用してアクティビティのライフサイクルを聴くことができます。こちら(https://developer.android.com/reference/android/app/Application.ActivityLifecycleCallbacks.html)を参照してください。 – Avi