读书人

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

发布时间: 2012-08-29 08:40:14 作者: rapoo

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

读书人网 >Android

热点推荐