2
這是我的代碼:服務綁定到活動
public class MainActivity extends Activity {
private ComponentName mService;
private Servicio serviceBinder;
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
serviceBinder = ((Servicio.MyBinder)service).getService();
}
public void onServiceDisconnected(ComponentName className) {
serviceBinder = null;
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent bindIntent = new Intent(this, Servicio.class);
bindService(bindIntent, mConnection, Context.BIND_AUTO_CREATE);
}
@Override
protected void onStart() {
serviceBinder.somethingThatTakesTooMuch();
super.onStart();
}
public class Servicio extends Service {
private final IBinder binder = new MyBinder();
@Override
public IBinder onBind(Intent intent) {
return binder;
}
public int somethingThatTakesTooMuch() {
return 1;
}
public class MyBinder extends Binder {
Servicio getService() {
return Servicio.this;
}
}
當我運行它, 它獲得了這一行業的NullPointerException異常:
serviceBinder.somethingThatTakesTooMuch();
synic:哦,你是怎麼想我應該處理,我不能顯示我的活動,直到我得到的連接? – Macarse 2010-05-11 21:08:34
好問題。我不知道。您可以通過預先創建它(可能在另一個活動中)來儘可能縮短所需的時間 – synic 2010-05-11 21:10:47
連接應該非常快速,但不會立即阻止。因此,我不會擔心時間 - 只需編寫需要該服務的代碼,以便通過onServiceConnected()來觸發。 – CommonsWare 2010-05-11 21:56:40