四大组件之一Service——应用实例二(IntentService类的使用)

应用实例一中介绍过service服务不会主动创建线程,默认是运行在主线程中的,所以如果在service中处理一些耗时的应用则会出现ANR(application not responding)的情况,所以往往需要在服务的onStartCommand方法中手动创建子线程来处理具体逻辑

但是常常程序员会忘记创建开启线程或者忘记停止服务(stopself()),为了简单的创建异步的、会自动停止的服务,android专门提供了一个IntentService类,该类已帮我们封装了开启线程以及停止服务的方法,具体实例如下:

一.创建mainactivity:

public class MainActivity extends Activity {
Button startButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        startButton = (Button)findViewById(R.id.StartService);
        startButton.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent = new Intent(MainActivity.this, MyIntentService.class);
startService(intent);

//打印主线程的id,用来对比判断MyIntentService服务中的逻辑是否运行在不同的线程中
Log.d("MainActivity", "Thread id is "+ Thread.currentThread().getId());

}
});
        }
}

二.创建MyIntentService:

public class MyIntentService extends IntentService {




public MyIntentService() {
super("MyIntentService");
}


@Override
protected void onHandleIntent(Intent intent) {
//打印当前线程的id,对比下主线程id,看是否一致
Log.d("MyIntentService", "Thread id is "+ Thread.currentThread().getId());
}

public void onDestroy(){
super.onDestroy();
//打印线程停止的log,若有log,则可判断当前服务在运行完成后会自动停止服务
Log.d("MyIntentService", "onDestroy executed");

}
}

三.在manifest中进行注释:

  <service
            android:name=".MyIntentService"
            android:enabled="true"
            android:exported="true" >
        </service>

运行后的代码如下:

点击start IntentService 按钮,即可出现以下log:


从log中可判断onHandleIntent方法是运行在子线程中的,且在服务执行完毕后会自动运行onDestroy方法来停止服务


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值