我正在開發應用程序,它將根據生日日期自動發送生日祝福,並由希望者註冊。 我已經創建了一個無限for循環的線程,它將從數據庫獲取當天日期的記錄,自動發送每分鐘的消息。如何在後臺服務中放置線程和無限foor循環
我的代碼在正常活動中正常運行。我想放置在SERVICE.so內部,以幫助我如何放置此代碼並在應用程序啓動時調用服務。
這是我的代碼
// function to run thread
void startThread()
{
Thread th=new Thread(){
@Override
public void run(){
//
try
{
for (;;)
{
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
//Getting the system date
Calendar today=new GregorianCalendar();
SimpleDateFormat simdate=new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat timeFormat=new SimpleDateFormat("hh:mm a");
String systemDate=simdate.format(today.getTime());
String systemTime=timeFormat.format(today.getTime());
// system process
minText.setText(systemTime);
control.open();
ArrayList<UserPOJO> event=control.MyDatabaseRecords(systemDate);//get the records for system date
for(int i=0;i<event.size();i++)
{
String dbContactID=event.get(i).getContactID();
String dbContactNumber=event.get(i).getContactNumber();
String dbContactMessage=event.get(i).getContactMessageBody();
String dbDate=event.get(i).getContactWishDate();
String dbTime=event.get(i).getContactWishTime();
String[] time=dbTime.split("[ \\:]");
String myhr=time[0];
String mymin=time[1];
String aorp=time[2];
String myDBhr=addZeroBeforeDate(myhr);
// adding zero before time hour
String CurrentDBTime=myDBhr+":"+mymin+" "+aorp;
Toast.makeText(getApplicationContext(),"Searching.....", 300).show();
//Toast.makeText(getApplicationContext(),"DB Time:"+CurrentDBTime+"System Time"+systemTime, 300).show();
if((dbDate.equals(systemDate))&& (CurrentDBTime.equals(systemTime)))
{//
System.out.println("Message Send at:"+systemTime);
Toast.makeText(getApplicationContext(),"Message Sent to :"+dbContactNumber+"on System time:"+systemTime, 300).show();
sendSMS(dbContactNumber, dbContactMessage);
//send.sendSMS(dbContactNumber, dbContactMessage);
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
});
Thread.sleep(60000);
// Thread.sleep(20000);
// set the scan for 60 seconds
}
}
catch (InterruptedException e) {
}
} // run
};
th.start();
}
// Add zero if it is
dateval<10
private static String addZeroBeforeDate(String datevalue)
{
String dval=datevalue;
for(int i=dval.length();i<2;i++)
{
dval="0"+dval;
}
return dval;
}
使用AlarmManager不要在永久for循環中每分鐘查詢數據庫。用戶的電池完全耗盡不會很長時間。 – Boardy