Android学习日志(2.1)

2018/07/24

一、service

1.service存在一个新的java文件通过,new/service创建

2.与MainActivity相似的是,MainActivity extends AppCompatActivity,Mainservice extends service

3.注意onbind()方法、binder对象:用于进程间通信。

onBind方法就是当试图绑定服务时做的事,作用一般情况下主要是返回IBinder对象,为后面服务成功绑定时的操作做准备。

a.不使用绑定时,service与客户端没有联系,只要不调用stopService,Service将一直运行。

b.bindService模式下的Service是与调用者相互关联的

c.如果Service已经由某个客户端通过StartService()启动,接下来由其他客户端再调用bindService()绑定到该Service后调用unbindService()解除绑定最后在调用bindService()绑定到Service的话,此时所触发的生命周期方法如下:
onCreate( )->onStartCommand( )->onBind( )->onUnbind( )->onRebind( )

4.Service中有几种方法:OnCreate()、OnStartCommond(intent,flag,startId)、OnDestory()、IBinder onOnbind(intent)、onUnbind(intent).

  • IBinder onOnbind(intent):该方法是Service都必须实现的方法,该方法会返回一个 IBinder对象,app通过该对象与Service组件进行通信.

其中OnStartCommond可以复用,OnCreate()只能在创建Service时使用。

5.通过StartSrevice(intent)和StopService(intent)调用Service。

二、广播Broadcast

1.Android中的每个应用程序都可以对自己感兴趣的广播进行注册,这样程序就可接受到自己感兴趣的广播。

换句话说,广播需要注册才能传播。

2.发送广播:intent,接受广播需要广播接收器Broadcast Receiver。

3.广播分为标准广播和有序广播,前者指的是广播传递时完全异步执行,后者广播传递有先后顺序。

有序广播可以通过设置优先级来确定先后顺序,先传递到的广播也可以截断广播。

4.广播接收器需要对广播注册,才能接受,并且在内部处理相应的逻辑。注册方法有两种:

a.动态注册:在代码中注册(Activity)

b.静态注册:在AndroidManifest.xml中注册 

5.动态创建广播接收器需要做到两点:继承Broadcast Receiver,重写onReceiver()。具体的逻辑在onReceiver()中执行。

6.IntentFilter的作用:翻译为连接过滤器(?),在原来所学的知识中,作用为在AndroidManifest.xml中注册谁为主活动。

这里在MainActivity的运用是添加相应的action使得广播接受器能够监听到相应的广播。

eg:intentFilter = new IntentFilter();

intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");

接下来需要将所创建的广播接收器实例与intentFilter注册,通过registerReceiver()方法进行注册,这样才能使得广播接收器实例接收到这条广播。

注意: 动态注册的广播接收器需要取消注册,这一点是通过onDestory()方法中通过调用unregisteReceiver()实现

其他注意事项:这里的Toast用法没有搞清楚,访问系统的网络状态需要权限,要在AndroidManidest.xml中注册权限。

7.静态注册广播接收器:new/Other/Broadcast Receiver.

同时需要对AndroidManifese.xml.做修改才能接受新的广播。

具体方法见《第一行代码》

8.发送自定义广播:Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST");

                               sendBroadcast(intent);

                          //有序:sendOrderedBroadcast(intent,null);

9.设定优先级的方法:<intent-filter android:priority="100">此时优先级为100

10.本地广播:安全性高,防止携带关键性数据的广播被截获,或是接受垃圾广播。并且,能使广播只在应用程序的内部发出和传递。

主要不同:使用Local Broadcast Manager来对广播进行管理。

onCreate()中 localbroadcastManager = LocalbroadcastManager.getInstance(this);//获取实例

注册和发送广播的时候用的分别是LocalBroadcastManager的registerReceiver()和sendBroadcast()方法。

三、其他

1.  每个app就像孤岛一样,生活在系统分配给自己的虚拟机和内存空间,好处是安全,各个app不会互相影响到对方,IE一个网页的崩溃却会导致整个IE应用程序死亡(举个小栗子,IE不属于跨进程)。在这种情况下,必须有一种机制,提供安全高效的通信的功能,Binder就为此而生。所以,Binder是Android系统的一种IPC(进程间通信)方式。ActivityManagerService、WinderManagerService等系统服务的背后都是Binder。

2. ServiceManager 从名字上看,就是service的管理者,其有独立的进程,会涉及一个问题,server向ServiceManager注册服务,或者client向ServiceManager请求服务,都是跨进程的,也需要进程通信,那binder是如何实现的呢,就是系统启动时,ServiceManager先通过ioctl BINDER_SET_CONTEXT_MGR 创建一个binder实体,这个binder不需要注册,Server向ServiceManager注册自己的服务通过引用号0实现。

3.Binder是一种架构,它提供了服务端接口、Binder驱动、客户端接口三个模块。

4.Toast.makeText(context,"音乐播放结束",Toast.LENGTH_SHORT).show();  常用的方法。


感悟:- -编程很需要英语功底,感觉有些看不懂得方法查了翻译之后就能懂得大概意思。我们在调用方法的时候,实操需要一个锚点与具体的代码连接,这个锚点可以通过中文建立。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值