服务
2017-07-19 09:16 烈'焰 阅读(214) 评论(0) 收藏 举报线程的用法:
首先new Handler()方法并且在其中重写handMessage()方法,并且调用what方法传入一个常数,在其中通过控件进行设置。
private Handler handler = new Handler() {//handler用于发送和处理消息的
public void handleMessage(Message msg) {//处理消息
switch (msg.what) {
case UPDATA_TEXT:
mtv.setText("你好啊啊啊啊啊");
mtv.setTextSize(20);
break;
default:
break;
}
}
};
2.在点击事件中,创建一个Message方法,并且给what赋值,最后通过hander调用sendMessaGE()将消息发送出去
public void onClick(View v) {
switch (v.getId()){
case R.id.butn:
new Thread(new Runnable() {
@Override
public void run() {
Message message =new Message();//在线程之间传递消息
message.what = UPDATA_TEXT;//出去what可以接受整形数据外还可以用arg1和arg2
handler.sendMessage(message);//传送数据
}
}).start();
break;
default:
break;
}
服务:
创建项目后首先创建一个服务,创建完成后你会看到它继承了Service,我们在其中重写onCreate(),onStartCommand(),onDestory()方法,如果开启服务他首先走onCreate(),onStartCommand()方法,如果停止服务后它走onDestory()方法,拿到只有这一种方法可以停止吗??当然不是你可以使用stopSelf()方法,只要添加在你想停止的地方只要执行到这他就会停止。
在点击按钮事件中首先定义一个意图,然后使用StartService()方法开启服务。用stopService()结束服务。
活动与服务之间的通信
修改我们创建的服务那个类,我们在其中创建一个DownloadBind类并且让它继承Bind这时候我们就会得到startDownload()和getProgress()方法。并且在onBind()中返回这个实例
我们在主函数中重写ServiceConnection匿名服务类并且在里面重写onServiceConnected方法和onServiceDisconnected()方法这两个方法分别在绑定服务和解绑服务的时候调用。在onServiceConnected()方法中分别调用DownloadBinder()中的starDownload()和getProgress()方法。在点击按钮中我没人构建出Intent对象,然后调用bindService()方法将MainActivity和MyService进行绑定,其中需要传入3个参数,第一个是Intent第二个ServiceConnection的实例,第三是一个标志位,这里传入BIND_AUTO_CREATE表示活动和服务进行绑定后自动创建服务
DownloadBaind mBaind = new DownloadBaind();
class DownloadBaind extends Binder{
public void starDownload(){
Log.d("Down","开始下载");
}
public int getProgress(){
Log.d("Down","结束");
return 0;
}
}
@Override
public IBinder onBind(Intent intent) {
return mBaind;
}
。。。。
case R.id.bind_service:
Intent bind = new Intent(this,MyService.class);
bindService(bind,connection,BIND_AUTO_CREATE);
break;
case R.id.unbind_service:
unbindService(connection);//关闭服务
break;
IntentService
首先创建一个类继承IntentService然后在子类中去实现onHandleIntent()这个抽象方法
public class MyIntentService extends IntentService {
public MyIntentService() {
super("MyIntentService");
}
@Override
protected void onHandleIntent(@Nullable Intent intent) {
//打印线程id
Log.d("MyIntentService"," "+Thread.currentThread().getId());
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d("MyIntentService","onDestroy222222222");
}
}
...
case R.id.intent_service:
Log.d("Myactivity"," "+Thread.currentThread().getId());
Intent intent=new Intent(this,MyIntentService.class);
startService(intent);
最后要在清单文件中配置一下
浙公网安备 33010602011771号