您的位置:首页 > 移动开发 > Android开发

安卓学习笔记之IntentService

2017-07-24 09:29 351 查看

什么是IntentService

它会创建一个独立的子线程来处理所有的Intent请求,创建的子线程来处理onHandleIntent()实现的代码,无需处理多线程的问题。默认实现onBind()方法,返回为null;默认实现onStartCommand()方法,将请求的Intent添加到队列中。这个类实际上是继承自service,内部是封装了HandlerThread和Handler类。

代码实现

首先创建一个MyIntentService类,继承自IntentService.

既然是Service,就是和单纯创建Service时,要在Manifest清单文件里面注册。

< service android:name=”.MyIntentService”/>

再布局文件里面就只添加一个按钮。代码就不贴了。

然后在MyIntentService 类里面。首先初步需要实现构造方法,传入一个名称,意思就是代表你该线程的名称叫做MyIntentService. onHandleIntent()这个方法在内部实现耗时操作的代码,一般是下载图片比较多。但是我们这里简单的演示一下这个类的使用方式。

public class MyIntentService extends IntentService {

private String str;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
Toast.makeText(MyIntentService.this, "已经收到消息了,消息是:"+str, Toast.LENGTH_SHORT).show();
}
};

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

@Override
protected void onHandleIntent(@Nullable Intent intent) {
//该方法是在子线程中执行的,所以需要和handler通信
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
handler.sendEmptyMessage(1);

}

@Override
public int onStartCommand(@Nullable Intent intent, int flags, int startId) {
str = intent.getStringExtra("does");
return super.onStartCommand(intent, flags, startId);
}
}


在MainActivity类里面

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button btn_send;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_send= (Button) findViewById(R.id.btn_send);
btn_send.setOnClickListener(this);

}

@Override
public void onClick(View view) {
Intent intent=new Intent(this,MyIntentService.class);
intent.putExtra("does","测试成功");
startService(intent);
}
}


在MainActivity中,开启这个Service。

运行结果如下,



这就是IntentService的使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 多线程