20189208 2018-2019-2 《移动平台开发实践》第12周学习总结
教材学习内容总结
47章
- 服务的两种形式:
启动的:组件启动了服务,就是启动的,服务可在后台无限期运行;
绑定的:应用程序组件绑定到服务绑定的服务像是客户端-服务器中的服务器;
public class TestService extends Service {
@Override
public IBinder onBind(Intent arg0) {
return null;
}
}
- 回调方法
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章广播接收器
- 广播操作系统、程序、用户的意图,类似监听事件的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章闹钟服务
- 闹钟是内建服务,可通过编程随后调用操作,一次或重复。
- 发布的时间尽可能与指定时间
- 传递给set的工作可以推迟但不可以提前
- 方法: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,该方法允许应用程序精确地控制操作系统调 整闹钟触发时间的程度。
- 几种常量:
- AlarmManager.RTC,硬件闹钟,不唤醒手机(也可能是其它设备)休眠;当手机休眠时不发射闹钟。
- AlarmManager.RTC_WAKEUP,硬件闹钟,当闹钟发躰时唤醒手机休眠;
- AlarmManager.ELAPSED_REALTIME,真实时间流逝闹钟,不唤醒手机休眠;当手机休眠时不发射闹钟。
- AlarmManager.ELAPSED_REALTIME_WAKEUP,真实时间流逝闹钟,当闹钟发躰时唤醒手机休眠;
50章内容提供者
内容提供者是用来封装和其他应用程序共享的数据的一个Android组件,提供访问其他应用程序中的数据。
- 如果数据需要共享:
- 创建内容提供者拓展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
- ContentProvider类的方法:
- onCreate():当提供者被启动时调用。
- query():该方法从客户端接受请求。结果是返回指针(Cursor)对象。
- insert():该方法向内容提供者插入新的记录。delete():该方法从内容提供者中删除已存在的记录。
- update():该方法更新内容提供者中已存在的记录。getType():该方法为给定的URI返回元数据类型。
- 消费内容提供者
教材学习中的问题和解决过程
- 问题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 | |