线程的用法:
首先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);
最后要在清单文件中配置一下