私のアプリケーションでは、2つの別々のAPKがあります。最初のAPKからのアクティビティ(A1)はローカルサービスを開始し、このサービスによって提供されるメソッドを呼び出すことができます。その後、アクティビティA1は2番目のAPKから別のアクティビティ(A2)を開始します。A2アクティビティは、A1によって開始されたローカルサービスに接続しようとします。両方のアクティビティは、同じSharedUserIDを使用して同じプロセスで実行されています。LocalServiceのAPIの例に示されているように、サービスインターフェイスが提供されます。onBindのサービスメソッドは、メソッドgetService()を持つLocalBinderインスタンスを返します。A2のonServiceConnectedが呼び出されると、IBinderからMyService.LocalBinderにキャストしようとするとClassCastExceptionが発生しました。
デバッガーでは、A2アクティビティのonServiceConnectedのサービス引数がMyService.LocalBinderの正しいインスタンスであることがわかります。デバッガーでMyServiceのすべての属性を監視することもできますが、IBinderサービスをMyService.LocalBinderにキャストしようとすると、ClassCastException例外が発生しますか?回避策はありますか、それともAIDLを使用する必要がありますか?
public void onServiceConnected(ComponentName className, IBinder service)
{
try
{
MyService.LocalBinder binder = (MyService.LocalBinder)service;
m_IService = binder.getService();
}
catch(ClassCastException e)
{
}
}