0

Bundle は putIBinder と getIBinder を廃止したようです。これらは、私のサービスに (Bundle を介して) バインダーを渡すのに非常に便利だと思いました。これらは非推奨であるため、これに代わるものはありますか?

IBinder オブジェクトをサービスに渡す必要があり、バンドル アプローチが最も簡単な (最良の) ソリューションであると考えました。

ありがとう、J

4

3 に答える 3

4

これを投稿すると、バインダーを扱う人に役立つ可能性があります。私はこのアプローチを使用していますが、それでも動作しますBundle

// write
bundle.putParcelable(key, new ParcelableBinder(binder));
// read
ParcelableBinder value = bundle.getParcelable(key);
IBinder binder = value == null ? null : value.getBinder();
// or with possible NPE
IBinder binder = bundle.<ParcelableBinder>getParcelable(key).getBinder()

public static class ParcelableBinder implements Parcelable {

    IBinder mBinder;

    public ParcelableBinder(IBinder binder) {
        mBinder = binder;
    }

    private ParcelableBinder(Parcel in) {
        mBinder = in.readStrongBinder();
    }

    public IBinder getBinder() {
        return mBinder;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeStrongBinder(mBinder);
    }

    public static final Creator<ParcelableBinder> CREATOR = new Creator<ParcelableBinder>() {
        @Override
        public ParcelableBinder createFromParcel(Parcel in) {
            return new ParcelableBinder(in);
        }

        @Override
        public ParcelableBinder[] newArray(int size) {
            return new ParcelableBinder[size];
        }
    };
}
于 2015-06-03T21:19:17.947 に答える
1

サービス間で IBinders を渡すために Bundles を使用する必要はありません (javadoc で言及されている Bundle.{put,get}IBinder メソッドも表示されません)。

IBinder オブジェクトをインポートした後、AIDL で直接使用できます。たとえば、IOtherService への参照を IService のメソッドに渡したい場合、IService.aidl は次のようになります。

package com.yourpackage;

import com.yourpackage.IOtherService;

interface IService {
   void doSomething(IOtherService service);
}
于 2013-04-25T05:58:07.163 に答える
1

代わりに Parcelable の実装を使用することはあなたの場合に適用できますか (Bundle はとにかく Parcelable の実装にすぎません)?

Bundle v Parcelable に関するこの投稿をチェックしてください: Passing a custom Object from one Activity to another Parcelable vs Bundle

于 2013-05-10T16:29:19.457 に答える