LocalM**维护笔记 && Android学习笔记

0、binder

客户端向服务端获取服务的引用的工具,在内核层

1、Bundle

在两个activity中跳转 ,使用 Intent即可达到从class A-〉class B;如果跳转的过程中要传递信息 可以使用 Bundle,Bundle可以创建键值对对象;使用put**()创建

使用get**()读取;

2、handler

接受子线程的数据,并用此数据配合主线程更新UI;

在主线程中不推荐执行耗时的操作 

所以放在子线程中执行

但是执行完毕之后子线程要更新UI,Android中更新线程是不安全的机制;所以又得放回主线程进行更新UI;

handler机制出现了:

handler存在于主线程中,和子线程交流可以通过Message对象进行交互,子线程通过SendMessage发送Message传递有用的数据到主线程队列中

配合主线程进行更新UI;


handler的几个重要函数

(1)obtainMessage();通过此函数获取Message对象 

(2)sendMessage();通过此函数发送Message对象 

(3)Post();通过此函数把Runnable函数加入主线程队列


多线程handler搭建结构:

在主线程中创建一个 Handler对象,并且覆盖其handleMessage方法

在创建的工作线程中创建一个Message对象,设置其响应的属性

使用这个Handler对象把Message对象发送到主线程消息队列当中

主线程的Looper对象会不断监听消息队列里面的内容,如果消息队列有新的内容,就会拿到此消息,并交给发送此消息的handler对象处理

(0)Handler handler =new Handler(){

              实现 handleMessage(msg){

              To do...                      

handler.post(runnable)

              }

         }

(1)handler.post(runnable);//插入消息队列,通知主线程监听更新UI

(2)Runnable runnble=new Runnale(){

                      Message msg = handler.obtainMessage();

                      To do...to change msg

                      handler.sendMessage(msg);

        }

此处链接一篇好文(图文并茂): http://blog.csdn.net/zh19900207/article/details/8580203


------------------------------------------积累的分割线------------------------------------------

如果没有调用start方法是不会建立新线程,这样就是在原有线程中直接调用run方法

1、匿名内部类:

形式:不显示声明子类继承接口,而采用借口对象直接new一个对象的形式

作用:使用借口对象来“直接”调用接口中声明的函数

举个例子:

interface A{

   XXX fn(){};

}

class B{

    A a = new  A{

           XXX  fn(){}// 这就是内部类

    }

}


XXX main{

     a.fn();

}


----------------------------------------------积累的分割线-----------------------------------------

三种监听机制的实现:

(1)

ex1:

  1. playBtn.setOnClickListener(this);  
  2.         stopBtn.setOnClickListener(this);  
  3.         pauseBtn.setOnClickListener(this);  
  4.         exitBtn.setOnClickListener(this);  
  5.         closeBtn.setOnClickListener(this);  
  6.   
  7.     }  
  8.   
  9.     @Override  
  10.     public void onClick(View v) {  
  11.         int op = -1;  
  12.         intent = new Intent("com.homer.service.musicService");  
  13.   
  14.         switch (v.getId()) {  
  15.         case R.id.play:                             // play music  
  16.             op = 1;  
  17.             break;  
  18.         case R.id.stop:                             // stop music  
  19.             op = 2;  
  20.             break;  
  21.         case R.id.pause:                            // pause music  
  22.             op = 3;  
  23.             break;  
  24.         case R.id.close:                            // close activity  
  25.             this.finish();  
  26.             break;  
  27.         case R.id.exit:                             // stopService  
  28.             op = 4;  
  29.             stopService(intent);  
  30.             this.finish();  
  31.             break;  
  32.         }  
  33.   
  34.         Bundle bundle = new Bundle();  
  35.         bundle.putInt("op", op);  
  36.         intent.putExtras(bundle);  
  37.           
  38.         startService(intent);                           // startService  
  39.     }  

ex2:

  1.   btnPlayUrl = (Button) this.findViewById(R.id.btnPlayUrl);  
  2.         btnPlayUrl.setOnClickListener(new ClickEvent());  
  3.   
  4.         btnPause = (Button) this.findViewById(R.id.btnPause);  
  5.         btnPause.setOnClickListener(new ClickEvent());  
  6.   
  7.         btnStop = (Button) this.findViewById(R.id.btnStop);  
  8.         btnStop.setOnClickListener(new ClickEvent());  
  9.   
  10.         skbProgress = (SeekBar) this.findViewById(R.id.skbProgress);  
  11.         skbProgress.setOnSeekBarChangeListener(new SeekBarChangeEvent());  
  12.         player = new Player(surfaceView, skbProgress);  
  13.   
  14.     }  
  15.   
  16.     class ClickEvent implements OnClickListener {  
  17.   
  18.         @Override  
  19.         public void onClick(View arg0) {  
  20.             if (arg0 == btnPause) {  
  21.                 player.pause();  
  22.             } else if (arg0 == btnPlayUrl) {  
  23.                 String url="http://daily3gp.com/vids/family_guy_penis_car.3gp";  
  24.                 player.playUrl(url);  
  25.             } else if (arg0 == btnStop) {  
  26.                 player.stop();  
  27.             }  
  28.   
  29.         }  
  30.     }  
  31.   
  32.     class SeekBarChangeEvent implements SeekBar.OnSeekBarChangeListener {  
  33.         int progress;  
  34.   
  35.         @Override  
  36.         public void onProgressChanged(SeekBar seekBar, int progress,  
  37.                 boolean fromUser) {  
  38.             // 原本是(progress/seekBar.getMax())*player.mediaPlayer.getDuration()  
  39.             this.progress = progress * player.mediaPlayer.getDuration()  
  40.                     / seekBar.getMax();  
  41.         }  
  42.   
ex3:在ex1的this中直接new 接口,然后在接口的函数体内直接实现onClick

你可能感兴趣的:(LocalM**维护笔记 && Android学习笔记)