服務(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