2

我需要一些建议采取的方法...

这里有一些背景信息: 现在我有一个 Android 应用程序和一个单独的 java 程序在我的服务器上运行。Java程序不断地从不同的站点获取信息,并将它们存储在服务器上SQL数据库的14个不同条目中。然后,Android 应用程序会查询数据库以检索要显示的信息。

我的目标:我需要有关如何让应用程序处理从数据库检查更新,然后让用户知道有新信息的建议。我的第一个想法是,也许我需要启动一个单独的线程来查询数据库的修改时间。然后,如果它找到更新,它会在屏幕上弹出有新信息。我对线程或服务的工作方式不太了解,所以我想我正在寻找如何实现这一点,或者是否有一种完全不同的方式来进行更新检查会更好。

提前致谢,感谢任何反馈、意见或建议。

4

1 回答 1

0

嗨 Ryan
,我也在我的 android 应用程序中实现了类似的东西,令人惊讶的是,我的PostgreSQL服务器中也有 14 个表。
首先,即使应用程序不在前台,您也希望定期轮询服务器。为此,您需要运行后台服务- 在这里您必须在服务中手动创建一个线程,因为服务默认在 UI 线程上运行或使用IntentService - 您不必创建单独的线程。无论您在意图服务中编写的任何代码都将在不同的线程中自动处理
现在您必须让该服务定期执行。为此,请使用AlarmManager并使用setRepeating()功能。在参数中,您必须为您的ServiceIntentService提供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 回答