私は組み込みDB(Realm.io)にデータを保存していますが、継続したいインターネット接続があるかどうかを確認し、接続がOKならばサーバと同期するデータがあるかどうかを確認してからデータを同期させます組み込みDBから同期データを削除し、別のデータが埋め込みDBに追加されるまで状態を「同期」に設定します。データベースを同期するためのインターネット接続を継続的にチェックする方法は? (Android)
インターネット接続の非同期性をチェックしているようです。私はBroadcastReciever実装する必要があります。
Internet listener Android example
をしかし、私は活動を変更したときに多分私は、インターネット接続を取得するので、私はあらゆる活動でこれを行う必要があり、私は、すべての活動でこのブロードキャストレシーバを追加すると思ったが、汚れて見えますどのように私はこれをクリーンな方法で行うことができますか?ブロードキャストレシーバを持つスレッドを作成することは可能ですか?また、inet接続が正常にデータを保持していて、アプリケーションが終了するまでそのデータを有効にしておきますか?あなたの地元からのデータを送信するために
public class MyIntentService extends IntentService {
private PreferenceController preferenceController;
public MyIntentService() {
super("MyIntentService");
}
@Override
protected void onHandleIntent(Intent intent) {
preferenceController = new PreferenceController(this);
int i = 0;
while (i >= 0) {
Log.d("ISERVICE", "checking number: " + i);
checkUpdate();
waitInSeconds(300);
i++;
}
}
private void waitInSeconds(int seconds) {
try {
Thread.sleep(seconds * 1000);
} catch (Exception e) {
e.printStackTrace();
}
}
private void checkUpdate() {
if (preferenceController.getBooleanPreference("SYNC_DB", false)) { // if DB need to be synchronized
if (isOnline()) { // if connected to internet
syncDatabases();
}
}
}
private void syncDatabases() {
// Do stuff to synchronize realm.io with server
}
/*
Recieve Broadcast if internet is available again and call checkUpdate()
*/
public boolean isOnline() {
Runtime runtime = Runtime.getRuntime();
try {
Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8");
int exitValue = ipProcess.waitFor();
return (exitValue == 0);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
return false;
}
}
私はそれを試してみましょう。私は結果をコメントします – MikeOx
私はいつも助けてくれると確信しています –
IntentServiceについてのコメントは、Androidが30分のような時間の後にそれを殺すため、サービスを使用するほうが優れているだけでなく、短いタスク(何度も何度も関係ない)と長いタスクのためのIntentService(今は一度だけ)のために設計されています。 7時間以上稼働しているので、データをDBと同期させるために何か安全なものが必要な場合 インテントサービスが稼動しているかどうかをチェックし、再起動しない場合は、 – MikeOx