2

取るべきアプローチについていくつかの提案が必要です...

背景情報は次のとおりです。現在、サーバー上で Android アプリと別の Java プログラムを実行しています。Java プログラムは継続的に外に出て、さまざまなサイトから情報を取得し、それらをサーバー上の SQL データベース内の 14 の異なるエントリに格納します。次に、Android アプリはデータベースにクエリを実行して、表示する情報を取得します。

私の目標: アプリがデータベースからの更新をチェックし、新しい情報があることをユーザーに知らせる方法についての提案が必要です。私が最初に考えたのは、変更された時刻をデータベースに照会する別のスレッドを開始する必要があるのではないかということです。次に、更新が見つかった場合、新しい情報があることを画面にポップアップ表示します。私はスレッドやサービスの仕組みについて十分に教育されていないので、これを実装する方法、または更新チェックを行うためのまったく別の方法があるかどうかを探していると思います。

フィードバック、ご意見、ご提案をお待ちしております。

4

1 に答える 1

0

こんにちは 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を使用してください。それがどのように機能するかについて詳しく知るには、これを参照して
ください。

于 2012-11-16T03:05:30.513 に答える