AIDLを使用しています。サービスとアクティビティがあります。関数 onCreate でサービスをバインドし、UI を更新したい:
private ServiceConnection conn = null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
bindService();
String name = conn.s.getName();
}
public class ServiceConnection implements ServiceConnection {
public IService s = null;
public void onServiceConnected(ComponentName className, IBinder boundService) {
s = IService.Stub.asInterface((IBinder) boundService);
Log.d(getClass().getSimpleName(), "onServiceConnected()");
}
public void onServiceDisconnected(ComponentName className) {
s = null;
Log.d(getClass().getSimpleName(), "onServiceDisconnected");
}
}
サービスがまだバインドされていないため、nullpointer を取得します。アクティビティがサービスにバインドされているかどうかを確認するにはどうすればよいですか?
本当に必要なのは簡単です: アクティビティを作成します -> AIDL を使用してサービスから情報を取得します -> UI を更新します。「更新」ボタンを押すとすべて正常に動作しますが、これを自動的に行う方法がわかりません。アイデア?私はスレッドを行うことができます:
while(conn.s==null)
;
updateUI();
しかし、それはエレガントでも効率的でもないと思います。