首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

为何在服务里的进程或时钟无效

2012-08-29 
为什么在服务里的进程或时钟无效?做了一个未接电话提醒,直接运行Activity,有个服务,整个都没问题,关键是开

为什么在服务里的进程或时钟无效?
做了一个未接电话提醒,直接运行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,看看有没有走。

热点排行