2017-07-05 8 views
0

私はマニフェストサービスが別のプロセスにあっても、aidl経由で関数を実行するとAndroidのアクティビティがハングアップしました。なぜですか?

私の活動で
<service 
    android:name=".AService" 
    android:enabled="true" 
    android:exported="true" 
    android:process=":Adsadas" 
    > 

、実行バインドサービスに次のように含まれ、バインダーを受け、サービス機能 実行した - >mRemoteService.firstFunc() - サービスで活動

からこれを実行し

private final IService.Stub mBinder = new IService.Stub() { 
     @Override 
     public void firstFunc() throws RemoteException { 
      Log.d(TAG,">>- firstFunc"); 
      try { 
       Thread.sleep(10000); 
      } catch (InterruptedException e) { 
      } 
      Log.d(TAG,"<<- firstFunc"); 
     } 
} 

アクティビティからfirstFunc()を実行しているときに、マニフェストに別のプロセスとして追加しても、UIが10秒間応答しなくなりました。理由は何でしょうか?

答えて

0

あなたのスレッドで実行されているAIDLを使用しています。別のスレッドで実行するか、メッセンジャーを使用してサービスと通信する必要があります。

あなたはそれが唯一の機能を実行するためだ場合は、ハンドラまたはAsyncTaskを使用することを検討してhttps://developer.android.com/guide/components/bound-services.html

でのサービスとの通信についての詳細を読むことができます。

関連する問題