如果在主线中写的话会出现
//ANR:application not responsing应用程序未响应
//耗时操作写到主线程
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//耗时操作
for (int i = 0; i <100 ; i++) {
Log.i("test","i="+i);
SystemClock.sleep(1000);
}
return super.onStartCommand(intent, flags, startId);
}
//解决方案写个子线程
class MyThread extends Thread{
@Override
public void run() {
super.run();
//耗时操作
for (int i = 0; i <100 ; i++) {
Log.i("test","i="+i);
SystemClock.sleep(1000);
}
}
}
//服务和Thread的区别就是:
古代双方领兵打仗有将军和小兵
将军 就是 服务 将军在好多时候都是快死了就是死不了总是莫名其妙的有满血复活了
小兵 就是 Thread 小兵死了就死了 有的时候没有小兵还不行
明明是是服务执行耗时操作 却要Thread执行耗时操作
不要Thread还不行
服务就算死了还能活过来
//关闭服务
//停止服务
//当第一个线程执行完毕,则停止服务
//stopSelf();
//所有的线程都执行完毕后,才会停止服务
stopSelf(startId);
Service和IntentService的区别
IntentService能在主线程中执行耗时操作
里面有异步任务类
Service服务执行耗时操作要在子线程中执行不能再主线程中执行