編輯:關於Android編程
1.Service是什麼 Service是Android的四大組件之一,即Android系統的服務(不是一個線程,是主程序的一部分),與Activity不同,它是不能與用戶交互的,不能自己啟動的,需要調用Context.startService()來啟動,運行後台,如果我們退出應用時,Service進程並沒有結束,它仍然在後台行。比如我們播放音樂的時候,有可能想邊聽音樂邊干些其他事情,當我們退出播放音樂的應用,如果不用Service,我們就聽不到歌了,所以這時候就得用到Service了。 2.Service生命周期 ①onCreate() 創建Service ②onStart(Intent intent, int startId) 啟動Service ③onDestroy() 銷毀Service ④onBind() 返回一個IBinder接口對象給Service 3.啟動和停止Service ①啟動:startService(Intent intent)來啟動Service,這時Service會調用自身的onCreate()方法(該Service未創建),接著調用onStart()方法。 ②停止:stopService(Intent intent)來停止Service,這時Service會調用自身的onDestory()方法。 4.綁定Service 調用bindService(Intent service, ServiceConnection conn, int flags)來綁定一個Service,這時Service會調用自身的onCreate()方法(該Service未創建),接著調用onBind()方法返回客戶端一個IBinder接口對象。(注意:如果返回null,ServiceConnection對象的方法將不會被調用) 參數①service:Intent對象 。 參數②conn:ServiceConnection對象,實現其onServiceConnected()和onServiceDisconnected()在連接成功和斷開連接時處理。 參數③flags:Service創建的方式,一般用Service.BIND_AUTO_CREATE表示綁定時自動創建 在注冊服務的時候,為了將service納入編譯系統,必須在AndroidMainfest.xml中對Service進行顯式聲明。 2.計算量較大的又不是UI層的工作的話,可以選擇放置在Service中進行工作。 3.通過開發文檔你會發現,Android中的Service與宿主(調用者)在同一線程,而不是專門起一條線程,這意味著,如果你的服務要CPU密集型操作(如:MP3播放)或則阻塞操作(如網絡)時,必須產生它自己的線程來完成這個工作,否則會造成線程阻塞。在Service的子類裡面,IntentService類服務可以作為一個標准的實施,它的工作有其自己的線程。 4.如果在使用Service的時候又使用了廣播接收器配合工作,廣播如果是動態注冊的話,在服務停止的時候記得調用unregisterReceiver(receiver);這個方法來注銷掉接收器 1)Context.startService():Service會經歷onCreate -> onStart(如果Service還沒有運行,則android先調用onCreate()然後調用onStart();如果Service已經運行,則只調用onStart(),所以一個Service的onStart方法可能會重復調用多次); stopService的時候直接onDestroy,如果是調用者自己直接退出而沒有調用stopService的話,Service會一直在後台運行。該Service的調用者再啟動起來後可以通過stopService關閉Service。 注意,多次調用Context.startservice()不會嵌套(即使會有相應的onStart()方法被調用),所以無論同一個服務被啟動了多少次,一旦調用Context.stopService()或者stopSelf(),他都會被停止。補充說明:傳遞給startService()的Intent對象會傳遞給onStart()方法。調用順序為:onCreate --> onStart(可多次調用) --> onDestroy。 (2)Context.bindService():Service會經歷onCreate() -> onBind(),onBind將返回給客戶端一個IBind接口實例,IBind允許客戶端回調服務的方法,比如得到Service運行的狀態或其他操作。這個時候把調用者(Context,例如Activity)會和Service綁定在一起,Context退出了,Srevice就會調用onUnbind -> onDestroyed相應退出,所謂綁定在一起就共存亡了。 補充說明:傳遞給bindService()的Intent對象會傳遞給onBind(),傳遞給unbindService()的Intent對象會傳遞給onUnbind()方法。調用順序為:onCreate --> onBind(只一次,不可多次綁定) --> onUnbind --> onDestory。 (3)注意事項:在Service每一次的開啟關閉過程中,只有onStart可被多次調用(通過多次startService調用),其他onCreate,onBind,onUnbind,onDestory在一個生命周期中只能被調用一次。還有一點,目前我沒有遇到過需要startService和bindService交互使用的情況(我認為不會有這種需求),所以不必去考慮交互的問題,待遇到時再考慮不遲。 (4)BroadcastReceiver只能通過startService啟動Service,因為廣播本身生命周期很短,bind的話沒有意義
最近在慕課網,學習了關於進度條的自定義,有直線型和圓形進度條兩種:需要的文件value目錄下的attrs.xml:
本節引言: 好的,終於學習完Adapter類相關的一些控件,當然除了講解的那幾個,還有其他很多的 相關的控件,就不慢慢講解了~有需要的自行查閱文檔,查看相關的
今天在使用安卓三星S3開發時,發現數據庫老是鎖住,其他機型並未出現鎖住的問題,查看數據庫所在的文件夾發現,和db文件同名的多出了一個文件以-journal結尾的莫名其妙的
以下源碼來自Launcher2.3的例子 1.默認每個應用的主Activity都會自帶 ,表示該應用安裝到Launcher時點擊打開該Activity 2.