【发布时间】:2012-11-06 17:54:23
【问题描述】:
我有一个启动服务的活动(称为 StartActivity)。服务调用我的 MainActivity 类中的方法。该过程应该在 Service 类内部的计时器上重复。该程序在一次执行后停止,但显然没有重新安排。我知道在启动 Activity 时将 onStart 命令提供给服务,因为程序第一次运行时,当单击 Activity 时。两个任务都不会再次运行。任何的建议都受欢迎。 TLDR:计时器没有重复调用方法。它只在第一次工作。
服务类
import java.util.TimerTask;
import java.util.Calendar;
import java.util.Timer;
import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.util.Log;
public class SvcActivity extends Service {
TimerTask questionTask;
TimerTask gpsTask;
Handler handler = new Handler();
Timer t = new Timer();
@Override
public int onStartCommand(Intent i,int flags,int startID) {
Log.i("AAA","---In service---");
questionTask = new TimerTask() {
public void run() {
handler.post(new Runnable() {
public void run() {
if(getHour()>=10&&getHour()<=22)
{
Intent i=new Intent(SvcActivity.this,MainActivity.class);
i.putExtra("key", "setup");
i.setFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Log.i("AAA","---right before startActivity---");
startActivity(i);
}
else
Log.i("AAA","---not between 10am and 10pm. Correct!");
}
});
}
};
gpsTask = new TimerTask() {
public void run() {
handler.post(new Runnable() {
public void run() {
Log.i("AAA","---in async task");
if(MainActivity.con!=null)
{
Log.i("AAA","---about to call async task");
BackgroundActivity objAsyncTask = new BackgroundActivity();
objAsyncTask.execute();
}
}
});
}
};
int q=(int)(Math.random() * 2);
if(q<1)
{
// first run, subsequent time delay. in miliseconds
t.schedule(questionTask, 300, (3600000+2700000)); // 1 hour 45 min
}
else
t.schedule(questionTask, 300, (7200000+900000)); // 2 hour 15 min
t.schedule(gpsTask, 300, 300000);// 5 min
return START_STICKY;
}
//-----------------------------get hour------------------------------------------
public int getHour()
{
Calendar c=Calendar.getInstance();
int hour=c.get(Calendar.HOUR_OF_DAY);
return hour;
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
}
【问题讨论】:
-
这不是一个答案,但我已经回答了类似的问题,使用
Handler总是更好:stackoverflow.com/questions/13100196/… -
if(MainActivity.con!=null)- 不要这样做。如果我没看错,那么MainActivity扩展了 AndroidActivity类。如果是这种情况,切勿在Activity中公开任何方法或字段并尝试从任何其他应用程序组件访问它们。Activity应该是完全独立的。 -
谢谢你们的回复,但我仍然不明白为什么几分钟后电话就停止了。@Chris.jenkins 我以为我已经在使用处理程序了。我看了你的另一个帖子,我错过了什么吗?我希望让通话保持一段时间,我可以使用一个倒数计时器设置很长时间吗?这不是一个好的解决方案,但它是我能想到的唯一尝试。
标签: android service android-asynctask