zoukankan      html  css  js  c++  java
  • 服务

    线程的用法:

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

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

  • 相关阅读:
    poj 2886 Who Gets the Most Candies?(线段树)
    Android开发之SoundPool使用具体解释
    Win8.1应用开发之动态磁贴
    开发人员获取苹果技术支持
    Win32 Windows编程 十二
    华为上机练习题--压缩字符串
    PS 滤镜算法原理 ——马赛克
    JS版汉字与拼音互转终极方案,附简单的JS拼音输入法
    mybatis入门基础----动态SQL
    windows上如何搭建Git Server
  • 原文地址:https://www.cnblogs.com/lyl123/p/7202564.html
Copyright © 2011-2022 走看看