服务(service)是一种Android组件。服务没有用户界面,而且在后台运行。它适用于长时间运行的操做。
服务和在其中声明服务的应用程序在相同的进程上运行,而且在应用程序的主线程上运行。
服务能够采起两种形式之一,它能够是启动的或绑定的。
若是一个组件启动了服务,它就是启动的。即使启动服务的组件已经再也不接受服务或者被销毁了,该服务还能够在后台无限期地运行。
若是应用程序组件绑定到服务,该服务就是绑定的。绑定的服务就像是客户端-服务器关系中的一台服务器,接受来自其余应用程序组件的请求,而且返回结果。
术语可访问性(accessibility),表示一个服务能够是私有的或公有的。公有的服务器能够由任何的应用程序调用,私有的服务器只可以由服务声明所在的相同的应用程序之中的组件来访问。
服务必须在清单中的之下使用service元素来声明。java
Android系统老是会将在操做系统和应用程序运行期间发生的意图进行广播。此外,应用程序也能够广播用户定义的意图,能够经过在应用程序中编写广播接收器来利用这些广播。
广播接收器是一个应用程序组件,它监听一个特定意图广播,相似于监听事件的Java监听器。android
相关方法:数据库
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,该方法容许应用程序精确地控制操做系统调 整闹钟触发时间的程度。
代码示例服务器
public class WakeUpActivity extends Activity { private final int NOTIFICATION_ID = 1004; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final Window window = getWindow(); Log.d("wakeup", "called. oncreate"); window.addFlags( WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); setContentView(R.layout.activity_wake_up); addNotification(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_wake_up, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } public void dismiss(View view) { NotificationManager notificationMgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); notificationMgr.cancel(NOTIFICATION_ID); this.finish(); } private void addNotification() { NotificationManager notificationMgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); Notification notification = new Notification.Builder(this) .setContentTitle("Wake up") .setSmallIcon(android.R.drawable.star_on) .setAutoCancel(false) .build(); notification.defaults|= Notification.DEFAULT_SOUND; notification.defaults|= Notification.DEFAULT_LIGHTS; notification.defaults|= Notification.DEFAULT_VIBRATE; notification.flags |= Notification.FLAG_INSISTENT; notification.flags |= Notification.FLAG_AUTO_CANCEL; notificationMgr.notify(NOTIFICATION_ID, notification); } }
内容提供者是用来封装要和其余应用程序共享的数据的一个Android组件。
要建立一个内容提供者,你须要扩展android.content.ContentProvider类,这个类提供CRUD方法,也就是用于建立、访问、更新和删除数据的方法。
内容提供者中的数据,经过一个独特的URI来引用。内容提供者的消费者,必须知道这个URL,才可以访问内容提供者的数据。
ContentProvider类
query方法(访问底层的数据)
insert方法(添加一个数据项)
update方法(能够使用u方法来更新一个数据项或一组数据项)
delete方法(删除一个数据项或一组数据项)ide
在音乐播放器中使用了query来找到数据库中音乐。学习
long id = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media._ID));//音乐id String title = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));//音乐标题 String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));//艺术家 String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));//专辑 long albumid = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));//专辑id long duration = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION));//时长 long size = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.SIZE));//文件大小 String url = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));//文件路径 int isMusic = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.IS_MUSIC));//是否为音乐
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 150/200 | 2/2 | 20/20 | |
第二周 | 200/400 | 1/3 | 20/40 | |
第三周 | 100/500 | 1/4 | 10/50 | |
第四周 | 200/700 | 1/5 | 15/65 | |
第五周 | 1486/2186 | 1/6 | 15/80 | |
第六周 | 1400/3586 | 1/7 | 18/98 | |
第七周 | 1400/5000 | 1/8 | 18/116 | |
第八周 | 1200/6200 | 1/9 | 15/131 | |
第九周 | 800/7000 | 2/11 | 12/143 | |
第十周 | 1500/8500 | 1/12 | 15/158 | |
第十一周 | 1500/10000 | 1/13 | 10/168 | |
第十二周 | 1200/11200 | 1/14 | 12/180 |
计划学习时间:15小时ui
实际学习时间:12小时this