編輯:關於Android編程
四大組件中, Service跟Activity的生命周期非常類似,它也是可執行的.甚至可看做是沒有界面的"Activity", 因為它的運行,用戶並不會像Activity那樣能看到它能呈現出來具體的視圖界面. 同樣,就像Activity一樣, 需要繼承Service來使用它的子類. 並且同樣需要在AndroidManifest.xml中配置所定義的Service.
簡述上面周期中的幾個方法:<喎?/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPjwvcD4KPHA+MSwgyOfNvMq+LFNlcnZpY2UgtcS8uLj2t723qG9uQ3JlYXRlKCksIG9uRGVzdHJveSgpyse4+kFjdGl2aXR50rvR+bXELLa8yse0tL2ous3P+rvZx7C72LX3tcS3vbeoLlNlcnZpY2XU2kFjdGl2aXR5wO+xu7S0vajG9Lavus3No9a5LCDSsr/J0tTU2tfUye3KudPDc3RvcFNlbGYoKcC0zaPWuS48L3A+CjxwPjxicj4KPC9wPgo8cD4yLCBvblN0YXJ0KCkg1NrQwrDmsb7S0b6tsbtvblN0YXJ0Q29tbWFuZCgpy/m0+szmLMjnufvKx9Om08PWp7PWvsmw5rG+tcTPtc2zLNTyvMzQ+NPDb25TdGFydCgpLiAgb25TdGFydCgwILrNb25TdGFydENvbW1hbmQoKSC2vMrHU2VydmljZcb0tq/Ksbvhu9i197XEt723qC4gyOe5+8rHzai5/XN0YXJ0U2VydmljZSgpwLTG9LavU2VydmljZSzEx8O0w7+0zsb0tq+2vLvhu9i1929uU3RhcnRDb21tYW5kKCkg1eK49re9t6guPC9wPgo8cD48YnI+CjwvcD4KPHA+Mywgb25CaW5kKCksIFNlcnZpY2Wxu7DztqjKsbvYtfe1xLe9t6guIDwvcD4KPHA+PGJyPgo8L3A+CjxwPjQsIG9uVW5iaW5kKCksIFNlcnZpY2W6zcv5sPO2qLXEy/nT0EFjdGl2aXR5try2z7+qyrG74bvYtfe4w7e9t6guPC9wPgo8cD48YnI+CjwvcD4KPHA+PHN0cm9uZz7V4sDv0qrHv7X3z8JBY3Rpdml0ecb0tq9TZXJ2aWNltcTBvdbWt723qLrNx/ix8Do8L3N0cm9uZz48L3A+CjxwPkFjdGl2aXR5v8nS1M2ouf1zdGFydFNlcnZpY2UoKSC6zSBiaW5kU2VydmljZSgpIMG9uPa3vbeowLTG9LavLiBzdGFydFNlcnZpY2UoKcb0tq9TZXJ2aWNlLCBBY3Rpdml0ebrNU2VydmljZdauvOTDu9PQudjBqiwgtbFBY3Rpdml0ec3Ls/bByyxTZXJ2aWNlu+G8zND4tObU2rKi1MvQ0C4gtvhiaW5kU2VydmljZSgpILe9yr3G9LavtcS7sCxBY3Rpdml0ebrNU2VydmljZcrH09C52MGqtcQsQWN0aXZpdHmyu732xNy6zVNlcnZpY2XNqNDFLLKix9K1sUFjdGl2aXR5zcuz9sqxLFNlcnZpY2XSsrvh1tDWuS7PwsPmu+HJz7j2wP3X0yzNqLn9tPrC67+0s/bH+LHwOjwvcD4KPHA+PGJyPgo8L3A+CjxoMj7F5NbDt73KvTwvaDI+CjxwPjxwcmUgY2xhc3M9"brush:java;">
** * 通過StartService()來啟動的Service對象 * @author Mr.Et * */ public class MyStartService extends Service{ private String TAG = "MyStartService"; @Override public void onCreate() { Log.i(TAG, "onCreate()"); super.onCreate(); } /** * Service被啟動後會回調該方法 */ @Override public int onStartCommand(Intent intent,int flags,int startId) { Log.i(TAG, "onStartCommand()"); super.onStartCommand(intent, flags, startId); return START_STICKY; } /** * (該方法必須被實現) * 綁定Service時會回調該方法 */ @Override public IBinder onBind(Intent intent) { //這裡默認為空,如果需要傳回Binder對象跟Activity通信 //則可以繼承Binder來實現返回對象即可. Log.i(TAG, "onBind()"); return null; } @Override public void onDestroy() { super.onDestroy(); Log.i(TAG, "onDestroy()"); } }
/** * 通過bindService()來啟動的Service對象 * @author Mr.Et * */ public class MyBindService extends Service{ private String TAG = "MyBindService"; public class MyBinder extends Binder { public void printContent() { Log.i(TAG, "print the content in Class - MyBinder."); } } /** * Service被創建是會回調該方法 */ @Override public void onCreate() { Log.i(TAG, "onCreate()"); super.onCreate(); } /** * Service被啟動後會回調該方法 */ @Override public int onStartCommand(Intent intent,int flags,int startId) { Log.i(TAG, "onStartCommand()"); super.onStartCommand(intent, flags, startId); return START_STICKY; } /** * 綁定Service時會回調該方法 */ @Override public IBinder onBind(Intent intent) { Log.i(TAG, "onBind()"); // 返回Binder的子類MyBinder和Activity通信 return new MyBinder(); } /** * 如果前面是通過bindService()來綁定啟動Service的, * 那麼當解綁停止Service時會調用該方法 */ @Override public boolean onUnbind(Intent intent) { Log.i(TAG, "onUnbind()"); return true; } /** * Service被銷毀前會回調該方法 */ @Override public void onDestroy() { Log.i(TAG, "onDestroy()"); super.onDestroy(); } }
第一種,startService()啟動Service
Intent StartIntent = new Intent(this,MyStartService.class); /** * 通過startService()啟動Service * 這種方式 */ private void doStartService() { //類似廣播,也可以用setAction("XXX")使特定的Service啟動 //StartIntent.setAction("com.test.service.My_MSG"); //創建Intent,跟跳轉Activity的方式類似 Intent StartIntent = new Intent(this,MyStartService.class); startService(StartIntent); } /** * 停止Service */ private void doStopService() { stopService(StartIntent); }
private MyBinder myBinder; private ServiceConnection conn = new ServiceConnection() { //當Activity和Service連接成功時會調用該方法 @Override public void onServiceConnected(ComponentName name, IBinder service) { // TODO Auto-generated method stub //在這裡通過自定義的Binder與Service通信 myBinder = (MyBinder)service; } //當Activity和Service斷開連接時會調用該方法 @Override public void onServiceDisconnected(ComponentName name) { // TODO Auto-generated method stub } }; /** * 通過bindService()啟動(綁定)Service */ private void doBindSerive() { Intent bindIntent = new Intent(); bindIntent.setAction("com.test.service.My_MSG"); //當Service還沒創建時, //第三個參數如果為0則不自動創建Service,為Service.BIND_AUTO_CREATE則自動創建 bindService(bindIntent, conn, Service.BIND_AUTO_CREATE); } /** * 解除綁定Service */ private void doUnbindService() { unbindService(conn); }
系統提供了IntentService, 它是Service的子類.默認新建新的線程在運行. 而Service是缺少這個特質的,因為Service和調用者( 比如某個Activity )是運行在同一個進程中,會直接和調用競爭有限的資源,所以Service不適合用於處理耗時耗資源的任務,否則極易阻塞主線程導致ANR錯誤.
而IntentService 是這一情況的比較好的解決方案. 它自動實現多線程, 會新建工作線程專門處理任務, 同時使用了隊列來管理請求啟動IntentService的各個Intent. 比如當有3個intent都請求該IntentService,那麼IntentService會按照隊列順序依次去新建線程,處理任務,保證在同一時間內只有一個intent在調用該intentService.當調用完畢會intentService會自動停止自身,並處理下一次的調用.直至最後.所以如果使用intentService, 用戶並不需要主動的使用stopService() 或者在intentService中使用stopSelf()來停止.
繼承IntentService必須實現onHandleIntent()方法, 將耗時的任務放在這個方法內即可. 其他方面,IntentService跟普通Service一樣.
(1)主要用了paint ,canvas 兩個類中的方法 (2)主要用了畫線和畫圓的方法。 (3)drawline(起始點軸坐標,起始點y軸坐標,終點軸坐標,終點y軸坐標
先看看效果圖:知識點分析效果圖來看不復雜內容並沒多少,值得介紹一下的知識點也就下面幾個吧 - 列表標題懸停 - 左右列表滑動時聯動 - 添加商品時的拋物線動畫 - 底部彈
引言在Google I/O 2014上,Google公布了Android L Preview版本,此版本的UI有了非常大的改變,很炫很給力!同時,Google也給出了兩個
設計(一)- 規劃Screens和他們之間的關系原文地址:http://developer.android.com/training/design-navigation/