一、Service學(xué)習(xí)
Service
? ? ? ? ? Service(服務(wù))是一個沒有用戶界面的在后臺運行執(zhí)行耗時操作的應(yīng)用組件祖屏。其他應(yīng)用組件能夠啟動Service助赞,并且當(dāng)用戶切換到另外的應(yīng)用場景,Service將持續(xù)在后臺運行袁勺。另外雹食,一個組件能夠綁定到一個service與之交互(IPC機制),例如期丰,一個service可能會處理網(wǎng)絡(luò)操作群叶,播放音樂,操作文件I/O或者與內(nèi)容提供者(content provider)交互钝荡,所有這些活動都是在后臺進行街立。
Service有兩種狀態(tài),“啟動的”和“綁定”:
? ? ? ?通過startService()啟動的服務(wù)處于“啟動的”狀態(tài)埠通,一旦啟動赎离,service就在后臺運行,即使啟動它的應(yīng)用組件已經(jīng)被銷毀了端辱。通常started狀態(tài)的service執(zhí)行單任務(wù)并且不返回任何結(jié)果給啟動者梁剔。比如當(dāng)下載或上傳一個文件,當(dāng)這項操作完成時舞蔽,service應(yīng)該停止它本身荣病。
? ? ? ?還有一種“綁定”狀態(tài)的service,通過調(diào)用bindService()來啟動渗柿,一個綁定的service提供一個允許組件與service交互的接口个盆,可以發(fā)送請求、獲取返回結(jié)果,還可以通過夸進程通信來交互(IPC)砾省。綁定的service只有當(dāng)應(yīng)用組件綁定后才能運行鸡岗,多個組件可以綁定一個service,當(dāng)調(diào)用unbind()方法時编兄,這個service就會被銷毀了。
另外声登,在官方的說明文檔中還有一個警告:
? ? ? service與activity一樣都存在與當(dāng)前進程的主線程中狠鸳,所以,一些阻塞UI的操作悯嗓,比如耗時操作不能放在service里進行件舵,比如另外開啟一個線程來處理諸如網(wǎng)絡(luò)請求的耗時操作。如果在service里進行一些耗CPU和耗時操作脯厨,可能會引發(fā)ANR警告铅祸,這時應(yīng)用會彈出是強制關(guān)閉還是等待的對話框。所以合武,對service的理解就是和activity平級的临梗,只不過是看不見的,在后臺運行的一個組件稼跳,這也是為什么和activity同被說為Android的基本組件盟庞。
Service生命周期中的一些方法:
在新建Service類后需要在Mainfest中注冊
IntendService(異步處理服務(wù))
IntentService繼承自Service,Service不是一個單獨的進程 汤善,它和應(yīng)用程序在同一個進程中什猖。
Service也不是一個線程,所以我們應(yīng)該避免在Service里面進行耗時的操作红淡。
把耗時的操作直接放在Service的onStart方法中不狮,這樣會出現(xiàn)(ANR)Application Not Responding!
如果有耗時操作在Service里在旱,就必須開啟一個單獨的線程來處理摇零。
IntentService使用隊列的方式將請求的Intent加入隊列,然后開啟一個worker thread(線程)來處理隊列中的Intent颈渊,對于異步的startService請求遂黍,IntentService會處理完成一個之后再處理第二個,每一個請求都會在一個單獨的worker thread中處理俊嗽,不會阻塞應(yīng)用程序的主線程雾家,這里就給我們提供了一個思路,如果有耗時的操作與其在Service里面開啟新線程還不如使用IntentService來處理耗時操作绍豁。
二芯咧、BroadcastReceiver學(xué)習(xí)
四大組件之一:廣播接收器,沒有用戶界面【挫可以分為順序廣播和普通廣播還有LocalBroadcastManager(本應(yīng)用的廣播)邪铲。廣播有適用范圍不能濫用。
兩種注冊形式:靜態(tài)注冊 ?動態(tài)注冊
Context.sendBroadcast接口發(fā)送廣播无拗,接收者通過Context.registerReceiver()動態(tài)注冊
在AndroidManifest.xml文件中通過標(biāo)簽靜態(tài)注冊
動態(tài)注冊
發(fā)送廣播
接收廣播
三带到、webview學(xué)習(xí)
訪問網(wǎng)頁(注冊網(wǎng)絡(luò)權(quán)限):
webView = (WebView) findViewById(R.id.webView);
webView.loadUrl(“http://www.baidu.com“);
webView.setWebViewClient(newWebViewClient(){
@Override
//重新加載
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//在這里加載
urlview.loadUrl(url);?
return ? super.shouldOverrideUrlLoading(view, url);}
});
四、widget學(xué)習(xí)
? ? ? ? App Widget是應(yīng)用程序窗口小部件(Widget)是微型的應(yīng)用程序視圖英染,它可以被嵌入到其它應(yīng)用程序中(比如桌面)并接收周期性的更新揽惹。你可以通過一個App Widget Provider來發(fā)布一個Widget。
1四康、注冊App Widget
2搪搏、初始化xml文件
3、繼承AppWidgetProvider
4闪金、AppWidgetProvider繼承自 BroadcastReceiver疯溺,它能接收 widget 相關(guān)的廣播,例如 widget 的更新哎垦、刪除囱嫩、開啟和禁用等。