bindService()
에 문제가 있습니다. 생성자에서 바인딩을 시도하고 있는데, 두 개의 파벌 블 엑스트라가 포함 된 인 텐트를 제공하고 있습니다. 생성자가 onResume()
에서 호출되고 해당 서비스의 onBind()
메서드에서 두 개의 추가 기능을 구문 분석하고 구문 분석의 결과로 null
을 반환 할 수 있습니다.Android bindService가 작동하지 않습니다.
Eclipse에서 실행을 통해 앱을 처음 실행하면 바인딩이 서비스에 의해 (예상대로) 거부됩니다. 서비스의 onBind()
메서드가 호출되고 null
을 반환합니다. 그러나 bindService()
메서드는 응용 프로그램 쪽에서 true
을 반환합니다 (바인딩이 통과하지 않았으므로!).
다음과 같이하면 문제가 발생합니다. HOME 버튼을 눌러 앱을 다시 시작합니다 (onResume()
이 다시 실행되어 앱이 서비스에 다시 바인딩을 시도 함). 이번에는 서비스 onBind()
도 실행되지 않는 것 같습니다! 하지만 앱의 bindService()
은 여전히 true
을 반환합니다!
다음은 내 문제를 이해하는 데 도움이되는 몇 가지 샘플 코드입니다.
응용 프로그램 측 :
// activity's onResume()
@Override
public void onResume() {
super.onResume();
var = new Constructor(this);
}
// the constructor
public Constructor(Context context) {
final Intent bindIntent = new Intent("test");
bindIntent.putExtra("extra1",extra_A);
bindIntent.putExtra("extra2",extra_B);
isBound = context.bindService(bindIntent, connection, Context.BIND_ADJUST_WITH_ACTIVITY);
log("tried to bind... isBound="+isBound);
}
서비스 측면 : 나는 결코, 그래서
@Override
public void onServiceConnected(final ComponentName name, final IBinder service) {
log("onServiceConnected(): successfully connected to the service!");
this.service = MyAIDLService.asInterface(service);
}
: 내가 사용
private MyAIDLService service = null;
@Override
public void onCreate() {
service = new MyAIDLService(getContentResolver());
}
@Override
public IBinder onBind(final Intent intent) {
log("onBind() called");
if (intent.getAction().equals("test") {
ExtraObj extra_A = intent.getParcelableExtra("extra1");
ExtraObj extra_B = intent.getParcelableExtra("extra2");
if (parse(extra_A,extra_B))
return service;
else {
log("rejected binding");
return null;
}
}
}
ServiceConnection
는 다음 onServiceConnected()
방법을 보유하지 "서비스에 성공적으로 연결되었습니다!"를 확인하십시오. 로그. 내가 이클립스를 통해 앱을 실행할 때 처음에는 "isBound = true"뿐만 아니라 "거부 된 바인딩"로그를 얻었지만, 거기에서 "isBound = true", "거부 된 바인딩"을 얻지 못한다. 다시는 오지 마라.
내가 거부했을 때도 성공적으로 바인딩되었음을 안드로이드가 인식 할 가능성이 있습니다. 이상적으로, 나는 또한 '언 바인드'도 강제 할 수 있지만, 불가능합니다 : 나는 앱을 죽일 때 서비스의 onUnbind()
메소드에있는 로그를 얻고 있기 때문에 이것이 의심 스럽습니다. 처음에는 구속력이 없어!).