首页 > 技术文章 > 服务

lyl123 2017-07-19 09:16 原文

线程的用法:

首先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);

 最后要在清单文件中配置一下

推荐阅读