Wisher에 의해 등록 된 시간과 함께 생일 날짜를 기반으로 생일 소원을 자동으로 전송하는 응용 프로그램을 개발 중입니다. 저는 무한 루프를 가진 스레드를 만들었습니다.이 스레드는 오늘날의 날짜에 대한 Database의 레코드를 가져와 매분마다 자동으로 메시지를 보냅니다.백그라운드 서비스에서 스레드를 무한 루프로 배치하는 방법
정상적인 활동 상태에서 코드가 올바르게 실행되고 있습니다. SERVICE.so에이 코드를 배치하고 응용 프로그램 시작시 서비스를 호출하는 방법을 알려줍니다.
이
첫째 자바Timer
라는 클래스가 .. 스레드에서 실행 루프에 대한 끝없는 쓰지 마십시오 사용, 일을 아주 끈적 방법이, 즉 내 코드
// 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