20189208 2018-2019-2 《移动平台开发实践》第12周学习总结

教材学习内容总结

47章

  1. 服务的两种形式:
    启动的:组件启动了服务,就是启动的,服务可在后台无限期运行;
    绑定的:应用程序组件绑定到服务绑定的服务像是客户端-服务器中的服务器;
public class TestService extends Service {
    @Override
    public IBinder onBind(Intent arg0) {        
        return null;
    }
}
  1. 回调方法

public class TestService extends Service {

    @Override
    public void onCreate() {        
        super.onCreate();
    }

    @Override
    public void onDestroy() {        
        super.onDestroy();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {        
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public IBinder onBind(Intent arg0) {        
        return null;
    }

}

4 service元素的属性

<service android:enabled=["true" | "false"]
//是否这个service能被系统实例化,如果能则为true,否则为false。默认为true。
   android:exported=["true" | "false"]    
   //是否其它应用组件能调用这个service或同它交互,能为true,默认值依赖于是否包含过滤器。
   android:icon="drawable resource"    
   //服务呈现的图标。
   android:isolatedProcess=["true" | "false"]    
   //如果设置为true,这个服务将运行在专门的进程中
   android:label="string resource"   
   //这个服务给用户显示的名称。
   android:name="string"    
   //实现这个service的Service子类名称。
   android:permission="string"   
   //为了启动这个service或绑定到它一个实体必须要有的权限的名称。
   android:process="string"  
   //服务将要运行的进程名称。
/>

48章广播接收器

  1. 广播操作系统、程序、用户的意图,类似监听事件的Java监听器
动作 说明
ACTION_TIME_TICK 当前时间修改,每分钟发送
ACTION_TIME_CHANGED 时间已经设置了
ACTION_TIME_ZONE_CHANGED 时区更改了
ACTION_BOOT_COMPLETED 系统完成了重启
ACTION_PACKAGE_ADDED 设备上安装了新的应用程序包
ACTION_PACKAGE_CHANGED 应用程序已经修改了
ACTION_PACKAGE_REMOVED 应用程序包已经删除
ACTION_PACKAGE_RESTARTED 用户重新启动一个包
ACTION_PACKAGE_DATA_CLEARED 用户清理了一个包的数据
ACTION_UID_REMOVED 用户uid删除了
ACTION_BATTERY_CHANGED 充电状态、级别、或其他细节已经修改
ACTION_POWER_CONNECTED 外部电源已经链接到设备
ACTION_POWER_DISCONNECTED 外部电源已经从设备断开
ACTION_SHUTDOWN 设备准备关闭

49章闹钟服务

  1. 闹钟是内建服务,可通过编程随后调用操作,一次或重复。
  • 发布的时间尽可能与指定时间
  • 传递给set的工作可以推迟但不可以提前
  1. 方法:set(int type,long startTime,PendingIntent pi):一次性闹钟
  • setRepeating(int type,long startTime,long intervalTime,PendingIntent pi): 重复性闹钟,和3有区别,3闹钟间隔时间不固定
  • setInexactRepeating(int type,long startTime,long intervalTime,PendingIntent pi): 重复性闹钟,时间不固定
  • cancel(PendingIntent pi):取消AlarmManager的定时服务
  • getNextAlarmClock():得到下一个闹钟,返回值AlarmManager.AlarmClockInfo
  • setAndAllowWhileIdle(int type, long triggerAtMillis, PendingIntent operation) 和set方法类似,这个闹钟运行在系统处于低电模式时有效
  • setExact(int type, long triggerAtMillis, PendingIntent operation): 在规定的时间精确的执行闹钟,比set方法设置的精度更高
  • setTime(long millis):设置系统墙上的时间
  • setTimeZone(String timeZone):设置系统持续的默认时区
  • setWindow(int type, long windowStartMillis, long windowLengthMillis, PendingIntent operation): 设置一个闹钟在给定的时间窗触发。类似于set,该方法允许应用程序精确地控制操作系统调 整闹钟触发时间的程度。
  1. 几种常量:
  • AlarmManager.RTC,硬件闹钟,不唤醒手机(也可能是其它设备)休眠;当手机休眠时不发射闹钟。
  • AlarmManager.RTC_WAKEUP,硬件闹钟,当闹钟发躰时唤醒手机休眠;
  • AlarmManager.ELAPSED_REALTIME,真实时间流逝闹钟,不唤醒手机休眠;当手机休眠时不发射闹钟。
  • AlarmManager.ELAPSED_REALTIME_WAKEUP,真实时间流逝闹钟,当闹钟发躰时唤醒手机休眠;

50章内容提供者

内容提供者是用来封装和其他应用程序共享的数据的一个Android组件,提供访问其他应用程序中的数据。

  1. 如果数据需要共享:
  • 创建内容提供者拓展android.content.ContentProvider类
  • 这个类提供CRUD方法
  • 必须用provider元素在应用程序清单中下注册
  • 本程序可访问,若为其它应用程序提供数据必须声明读写许可
  • 使用permission元素声明读许可,不能与已有的名称冲突
  • 内容提供者中的数据必须由URI来引用,消费者必须制定这个URI
  • 使用内容提供者的数据不需要运行提供者的程序
  • 默认的内容提供者
//定义内容提供者
public class MyApplication extends  ContentProvider {
}
//查询URI
<prefix>://<authority>/<data_type>/<id>

URI说明:

  • prefix
    前缀:一直被设置为content://
  • authority
    授权:指定内容提供者的名称,例如联系人,浏览器等。第三方的内容提供者可以是全名,如:cn.programmer.statusprovider
  • data_type
    数据类型:这个表明这个特殊的内容提供者中的数据的类型。例如:你要通过内容提供者Contacts来获取所有的通讯录,数据路径是people,那么URI将是下面这样:content://contacts/people
  • id
    这个指定特定的请求记录。例如:你在内容提供者Contacts中查找联系人的ID号为5,那么URI看起来是这样:content://contacts/people/5
  1. ContentProvider类的方法:
  • onCreate():当提供者被启动时调用。
  • query():该方法从客户端接受请求。结果是返回指针(Cursor)对象。
  • insert():该方法向内容提供者插入新的记录。delete():该方法从内容提供者中删除已存在的记录。
  • update():该方法更新内容提供者中已存在的记录。getType():该方法为给定的URI返回元数据类型。
  1. 消费内容提供者

教材学习中的问题和解决过程

  • 问题1:服务是不是在主线程运行?
  • 问题1解决方案:
    service是运行在主线程上的,而不是运行在另一个线程中,如果你想在service中处理很占时间的操作,你必须在service中开线程,这样可以降低activity没有响应的风险。

代码托管


学习进度条

|            | 代码行数(新增/累积)| 博客量(新增/累积)|学习时间(新增/累积)|重要成长|
| --------   | :----------------😐:----------------😐:---------------:  |:-----😐
| 目标        | 5000行            |   30篇           | 400小时            |       |
| 第一周      |       -----         |       -----       |        -----          |       |
| 第二周      | 180/180           |  2/3            | 18/18             |       |
| 第三周      | 429/609          |  1/4            | 24/42             |       |
| 第四周      | 588/1197        |  2/6            | 30/72             |       |
| 第五周      | 548/1745        |  2/6            | 20/92             |       |
| 第六周      | 15934/17679  |  2/8            | 20/112             |       |
| 第九周      | 18690/39576  |  1/12            | 21/173             |       |
| 第十周      | 18690/39576  |  2/14            | 21/194             |       |
| 第十一周      | 17636/57212  |  1/15            |17/211             |       |
| 第十二周      | 17636/57212  |  1/15            |17/211             |       |

参考资料

posted @ 2019-05-18 23:13  假的课代表  阅读(143)  评论(0编辑  收藏  举报