AudioFlinger 类开始的时候定义了
friend class BinderService<AudioFlinger>,为啥要定义一个这个呢,后面有个注视
// for AudioFlinger()
原来binderservice初始化的时候会new AudioFlinger出来,而audioflinger的构造函数的private,友元类就可以使用当前类的private方法了
来说说为啥要把构造函数设成private的
我觉得
1 是实现单例的好的方法
构造函数是private,所以不能被构造对象,不能再栈上使用这个对象,类必须提供static 方法来使得外部能够得到这个对象,非常的像单例模式
2 可以控制构造和析构
增加了新的接口 可以保证在初始化类之前和之后完成一些其他的操作
暂时想到这么多。
这样就知道了
在binder service中还可以用SERVICE::getInstance()来构造这个函数,当然需要增加新的接口
private void startAlarmService(){ Intent intent =new Intent(this, AlarmServiceBroadcastReceiver.class); intent.setAction("repeating"); sender=PendingIntent .getBroadcast(this, 0, intent, 0); //开始时间 long firstime=SystemClock.elapsedRealtime(); am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP , firstime, 20*1000, sender); }
AlarmManager,Timer,Thread区别
在android开发中,经常会用到定时触发某些操作,或者是间隔处理某件事
如闹钟,和后台定时请求数据:
需要定时处理闹钟任务
定时向服务器请求数据等
对于上述问题,我们可以通过定时器来完成,普遍的做法使用一个Thread来操作.也有使用Time实现定时操作
而android库里面也有一种全新的操作方式AlarmManager
那这几种方式有何区别呢
1.Thread:使用线程方式
2.Time是java的特性
3.AlarmManager:AlarmManager将应用与服务分割开来后,使得应用程序开发者不用 关心具体的服务,而是直接通过AlarmManager来使用这种服务。这也许就是客户/服务模式的好处吧。
第一种和第二种就不过多解释了,在此着重解释一下第三种
当我们在开发android程序时,有些用户会使用service来管理一些后台的任务,如网络操作,或者间断处理数据等,这些用户需要在用户关闭程序,或者关闭屏幕后也能处理后台任务,可android手机为了节省电池使用,当用户关闭屏幕后,会将cpu置于休眠状态,当休眠状态启动,我们的服务就处于暂停状态了.为了斛决这个问题,android库里就提供了一个AlarmManager的库,AlarmManager是客户/服务模式的模式,也就是说AlarmManager是由系统来管理,而不是我们应用程序的一部分,也就是说AlarmManager是全局的,当我们的程序启用AlarmManager后,就给系统注册了一个服务,该服务会根据你设置的参数定时的向你的应用程序发送消息(注意,此消息以广播方式发送).
AlarmManager的使用如下:
private void startAlarmService(){ Intent intent =new Intent(this, AlarmServiceBroadcastReceiver.class); intent.setAction("repeating"); sender=PendingIntent .getBroadcast(this, 0, intent, 0); //开始时间 long firstime=SystemClock.elapsedRealtime(); am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP , firstime, 20*1000, sender);
第一个参数设置cpu处理的方式:
public class AlarmServiceBroadcastReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Log.d("AlarmServiceBroadcastReceiver", "收到一个闹钟定时器发来的广播333333"); context.startService(new Intent(context, AlarmService.class)); } }
这种流程的程序该如何编写代码?(可编写简单示例)或要用到什么方面的知识?求解。
1楼kangli_19905天前 12:23走过路过,不要错过。一起来探讨起来吧~~~~