編輯:關於Android編程
服務,作為Android四大組件之一,必然是重點。我們今天就來講解一下有關服務的生命周期、兩種開啟方式以及相關用法。
服務有兩種開啟方式,一種是正常開啟, 一種是以綁定的方式開啟,當然,這兩種方式可以組成混合開啟。
public class TestService extends Service {
@Override
public IBinder onBind(Intent arg0) {
System.out.println("onBind");
return new Mybinder();
}
@Override
public void onCreate() {
System.out.println("create");
super.onCreate();
}
@Override
public void onDestroy() {
System.out.println("onDestroy");
super.onDestroy();
}
@Override
@Deprecated
public void onStart(Intent intent, int startId) {
System.out.println("start");
super.onStart(intent, startId);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
System.out.println("onStartCommand");
return super.onStartCommand(intent, flags, startId);
}
@Override
public boolean onUnbind(Intent intent) {
System.out.println("onUnbind");
return super.onUnbind(intent);
}
class Mybinder extends Binder implements IService {
public void method() {
System.out.println("serviceMethod");
}
}
}
intent = new Intent(getBaseContext(), TestService.class); startService(intent);
stopService(intent);
class Mybinder extends Binder implements IService {
public void method() {
System.out.println("serviceMethod");
}
} @Override
public IBinder onBind(Intent arg0) {
System.out.println("onBind");
return new Mybinder();
} class Mycon implements ServiceConnection {
@Override
public void onServiceConnected(ComponentName arg0, IBinder binder) {
Iservice = (IService) binder;
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
}
}intent = new Intent(getBaseContext(), TestService.class); conn = new Mycon(); bindService(intent, conn, BIND_AUTO_CREATE);當這樣綁定服務後,服務的生命周期執行是這樣的:onCreate-->onBind,不會執行onStartCommand方法,拿到代理類後,我們可以執行服務裡的方法了。
findViewById(R.id.test).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//startService(intent);
Iservice.method();
}
}); 這樣,就調用了服務裡的方法。
采用綁定的方式開啟服務有一個風險,就是如果采用綁定的方法開啟服務,那麼當你最小化程序的時候,會報錯。程序會提醒你要解綁服務才能這樣。這個時候我們就需要在一些actvity的生命周期裡面解綁服務
unbindService(conn);執行這行代碼,就可以解綁服務了。執行的生命周期函是:onUnBind-->onDestory
intent = new Intent(getBaseContext(), TestService.class); startService(intent); conn = new Mycon(); bindService(intent, conn, BIND_AUTO_CREATE);
unbindService(conn); stopService(intent); conn=null; intent=null;
package com.example.servicedemo;
interface IService {
void method();
}
class Mybinder extends IService.Stub {
public void method() {
System.out.println("serviceDemomethod");
}
}
將之前的接口文件修改之後,我們直接繼承接口文件自動生成的.Stub類即可
在綁定服務之前,需要重寫一下代理接口實現類,這裡不再采用強制轉換了。
class Mycon implements ServiceConnection {
@Override
public void onServiceConnected(ComponentName arg0, IBinder binder) {
Iservice = IService.Stub.asInterface(binder);
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
}
} Intent intent = new Intent();
intent.setAction("com.example.servicedemo.TestService.action");
bindService(intent, new Mycon(), BIND_AUTO_CREATE);
findViewById(R.id.test).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
Iservice.method();
} catch (RemoteException e) {
e.printStackTrace();
}
}
});
Android中Canvas繪圖之MaskFilter圖文詳解(附源碼下載)
如果對Canvas繪圖不熟悉,強烈建議您閱讀博文《Android中Canvas繪圖基礎詳解(附源碼下載)》,該文對Android中的Canvas繪圖基礎進行了詳細的描述。
DrySister看妹子應用(第一版)——4.添加數據緩存(加入SQLite)
1.一些BB???上節我們為DrySister編寫了一個異步圖片加載緩存框架——SisterLoader(妹子加載器)成功的從網絡加載的圖片緩存到
Android 自定義 View 實現通訊錄字母索引(仿微信通訊錄)
一、效果:我們看到很多軟件的通訊錄在右側都有一個字母索引功能,像微信,小米通訊錄,QQ,還有美團選擇地區等等。這裡我截了一張美團選擇城市的圖片來看看; 我們今天就來實現
Android游戲開發學習②焰火綻放效果實現方法
本文實例講述了Android游戲開發學習②焰火綻放效果實現方法。分享給大家供大家參考。具體如下:本節介紹在游戲開發中常用到的數學物理應用——粒子系統。粒子系統與上一節的小