こんにちは Ryan
私も Android アプリに同様のものを実装しましたが、驚くべきことに、PostgreSQLサーバーにも 14 個のテーブルがありました。
まず第一に、アプリがフォアグラウンドにない場合でもサーバーを定期的にポーリングする必要があります。そのためには、バックグラウンドサービスを実行する必要があります。ここでは、サービスに手動でスレッドを作成する必要があります。サービスはデフォルトで UI スレッドで実行されるか、 IntentServiceを使用するためです。別のスレッドを作成する必要はありません。インテント サービスに記述したコードは、自動的に別のスレッドで処理されます。次に、このサービスを定期的
に実行する必要があります。そのためには、AlarmManagerを使用し、setRepeating()
関数。引数では、ServiceまたはIntentServiceにPendingIntentを指定する必要があります。ただし、1 分未満ごとにサーバーをポーリングする場合は、アラーム マネージャーを使用しないでください。電池の消耗が激しいので。
これはあなたにアイデアを与えるかもしれないいくつかのコードです:
function setalarm()
{
Intent intent = new Intent(getBaseContext(), Intent_Service.class);
PendingIntent sender = PendingIntent.getBroadcast(getBaseContext(), 192837, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Random randomGenerator = new Random();
long interval=60000; //1 minute in milliseconds
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC, cal.getTimeInMillis(),interval,sender);
}
これはタイプ IntentService の Intent_Service です:
public class BackService extends IntentService
{
Context context=this;
//public Timer t=null;
public BackService()
{
super("myintentservice");
}
@Override
protected void onHandleIntent(Intent intent)
{
try
{
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");
wl.acquire();
//..CPU will remain on during this section..
//make our network connections, poll the server and retrive updates
//Provide a notification if you want
wl.release();//Release the powerlock
}
}
}
ただし、即時の更新
が必要な場合は、 Google Cloud Messaging Servicesを使用してください。それがどのように機能するかについて詳しく知るには、これを参照して
ください。