为何在服务里的进程或时钟无效
为什么在服务里的进程或时钟无效?
做了一个未接电话提醒,直接运行Activity,有个服务,整个都没问题,关键是开机启动。
一、开机启动(没问题,从日志上看是启动了)
public class BootReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED"))
{
context.startService(new Intent(context,HintService.class));
}
}
}
二、服务:
public class HintService extends Service
{
//当启动Service的时候会调用这个方法
@Override
public void onCreate()
{
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
//问题在这里。
}
}
在上面的onStartCommand,开启一个时钟,从日志上看,timer.schedule...方法已调用,但时间到了却不执行。
换成Thread,
public class HintThreadCls extends Thread
{
public int SleepMillSeconds=5*60*1000;
public void run()
{
// TODO Auto-generated method stub
try
{
while (!this.isInterrupted())
{
Globe.WriteLog("进入线程了。");
Thread.sleep(SleepMillSeconds);//线程暂停10秒,单位毫秒
uiHandler.sendEmptyMessage(168);
}
}
catch(InterruptedException ex)
{
}
Globe.WriteLog("线程,结束Run");
}
}
结果从日志上看,已经进入 "进入线程了。"这一步了,但时间到了,却没有往下走,也没有异常。
怎么回事?直接点运行无问题,就是重启后不行。
------解决方案--------------------
SleepMillSeconds=5*60*1000;
这个是5分钟啊,不是10秒
在
catch(InterruptedException ex)
{
ex.printStackTrace(); //加上输出看是否有出错信息
}
在uiHandler.sendEmptyMessage(168); 这个前面和后面分别加上
Log.i("test", "--->Start<----")
uiHandler.sendEmptyMessage(168);
Log.i("test", "--->Finish<----")
另外,Thread.sleep(SleepMillSeconds);建议换成:
做了一个未接电话提醒,直接运行Activity,有个服务,整个都没问题,关键是开机启动。
一、开机启动(没问题,从日志上看是启动了)
public class BootReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED"))
{
context.startService(new Intent(context,HintService.class));
}
}
}
二、服务:
public class HintService extends Service
{
//当启动Service的时候会调用这个方法
@Override
public void onCreate()
{
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
//问题在这里。
}
}
在上面的onStartCommand,开启一个时钟,从日志上看,timer.schedule...方法已调用,但时间到了却不执行。
换成Thread,
public class HintThreadCls extends Thread
{
public int SleepMillSeconds=5*60*1000;
public void run()
{
// TODO Auto-generated method stub
try
{
while (!this.isInterrupted())
{
Globe.WriteLog("进入线程了。");
Thread.sleep(SleepMillSeconds);//线程暂停10秒,单位毫秒
uiHandler.sendEmptyMessage(168);
}
}
catch(InterruptedException ex)
{
}
Globe.WriteLog("线程,结束Run");
}
}
结果从日志上看,已经进入 "进入线程了。"这一步了,但时间到了,却没有往下走,也没有异常。
怎么回事?直接点运行无问题,就是重启后不行。
------解决方案--------------------
SleepMillSeconds=5*60*1000;
这个是5分钟啊,不是10秒
在
catch(InterruptedException ex)
{
ex.printStackTrace(); //加上输出看是否有出错信息
}
在uiHandler.sendEmptyMessage(168); 这个前面和后面分别加上
Log.i("test", "--->Start<----")
uiHandler.sendEmptyMessage(168);
Log.i("test", "--->Finish<----")
另外,Thread.sleep(SleepMillSeconds);建议换成:
- Java code
synchronized(this) { try { wait(SleepMillSeconds); //等待 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
------解决方案--------------------
在Thread.sleep(SleepMillSeconds);//线程暂停10秒,单位毫秒
后面加句log,看看有没有走。