Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android組件之Service淺談

Android組件之Service淺談

編輯:關於Android編程

Service是Android中的四大組件之一,和windows中的服務是類似,服務一般沒有用戶操作界面,它運行於系統中不容易被用戶發覺,可以使用它開發如監控之類的程序Service,手機中有的程序的更新,服務的推送。Android系統中,Service與Activity類似,都需要AndroidManifest.xml文件中配置,而且生命周期有點類似。Service不像Activity在前台運行,而是默默的在後台默默的工作,簡單粗暴點理解就是男主內女主外,分工明確。   Service生命周期   service與activity一樣都存在與當前進程的主線程中,所以,一些阻塞UI的操作,比如耗時操作不能放在service裡進行,比如另外開啟一個線程來處理類似下載這種耗時操作。如果在service裡進行一些耗CPU和耗時操作,應用會彈出是強制關閉還是等待的對話框。因此service和activity是平級的,四大組件之一的地位也不是浪得虛名。先看張經典老圖:           這兩個都是Service的生命周期,從上到到下也沒有什麼難懂的英文,應該比較好理解,如果有困惑,可以先參考下面的程序就懂了.   兩種啟動Service方式   自定義一個BookService繼承自Service:         public class BookService extends Service  {       private String tag="BookService";       @Override     public void onCreate() {         // TODO Auto-generated method stub         super.onCreate();         Log.i(tag, "開始onCreate啟動了");     }       @Override     public int onStartCommand(Intent intent, int flags, int startId) {         // TODO Auto-generated method stub         Log.i(tag, "開始執行onStartCommand啟動了");         Toast.makeText(this, "BookService開始了",Toast.LENGTH_SHORT).show();         return super.onStartCommand(intent, flags, startId);               }       @Override     public void onDestroy() {         // TODO Auto-generated method stub         Log.i(tag, "銷毀onDestroy啟動了");         super.onDestroy();     }       @Override     public IBinder onBind(Intent intent) {         // TODO Auto-generated method stub         Log.i(tag, "綁定onBind啟動了");         return null;     }     @Override     public boolean onUnbind(Intent intent) {         // TODO Auto-generated method stub         Log.i(tag, "解綁onUnbind啟動了");         return super.onUnbind(intent);     }   }       看下效果圖:           布局很簡單,就不貼代碼了,但是需要在AndroidManifest.xml注冊一下代碼:     <service android:name="com.example.googleservice.BookService"></service> 點擊第一個按鈕執行的代碼,Intent之前有寫過,之前是startActivity,這裡用的startService:       Intent service=new Intent(this,BookService.class);         startService(service);       第二個按鈕執行的事件:     Intent stopservice=new Intent(this,BookService.class);             stopService(stopservice);   通過Log就很容易明白第一張圖了,第一種調用Service的方式也就簡單完成了;           第二種調用首先定義個繼承自ServiceConnection的BookConnection:     class BookServiceConnection implements ServiceConnection{        public BookServiceConnection() {          super();          // TODO Auto-generated constructor stub      }        @Override      public void onServiceConnected(ComponentName name, IBinder service) {          // TODO Auto-generated method stub      }        @Override      public void onServiceDisconnected(ComponentName name) {          // TODO Auto-generated method stub                 }         }   第三個按鈕觸發的代碼:     Intent binderStartIntent=new Intent(this,BookService.class);              connection=new BookServiceConnection();             bindService(binderStartIntent, connection,Context.BIND_AUTO_CREATE);   第四種按鈕觸發的事件:     unbindService(connection);   看下Log對比之後也就明白了第二張圖:       這兩種都很簡單,不過有的時候Activity和Service之間是要通信的:   這個時候你可以在BookService中定義一個內部類:         class BookBinder extends Binder {     public BookService getCurrentService() {         return BookService.this;     } }      這個時候在Activity中的BookServiceConnection中onServicedConnected中改動一下:     @Override     public void onServiceConnected(ComponentName name, IBinder service) {         // TODO Auto-generated method stub         //獲取實例         BookService  bookService=((BookService.BookBinder)service).getCurrentService();         //just  do  wo  you  want to do     }  Service一直在後台工作,可以通過Notification將消息傳遞到前台,修改一下BookService的onCreate()方法:   @Override public void onCreate() {     // TODO Auto-generated method stub     super.onCreate();      NotificationManager mNotificationManager = (NotificationManager)      getSystemService(NOTIFICATION_SERVICE);      NotificationCompat.Builder mBuilder =      new NotificationCompat.Builder(this)      .setSmallIcon(R.drawable.ic_launcher)      .setContentTitle("QQ空間")      .setContentText("北京真坑,開個會房子都被拆");            mNotificationManager.notify(0, mBuilder.build());     Log.i(tag, "開始onCreate啟動了"); }
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved