2016-05-10 9 views
-1

私のサービスにハンドラを作成する必要があると思われるSDKを使用しようとしています。looper.Uiスレッドを作成する

Looper.prepare()が呼び出されていない場合はハンドラを作成できないので、Looper.prepare()を呼び出してこの問題が解消されるというエラーメッセージが表示されました。 しかし、このサービスではしばらくしてからアクティビティを開始する必要があります。最初のUI関数がクラッシュして、非UIスレッドから呼び出すことができないという意味で、このLooper.prepare()が邪魔になっているようです。

なぜこれが起こっているのか、私は少し混乱しています。スレッドとルーパーで行った研究は私を助けませんでした。スレッドにルーパが存在しない場合はなぜハンドラを作成できないのですか?なぜルーパを作成すると、後でuiスレッドを使用できなくなるのでしょうか?私のコードの下

を簡素化:

public class MyService extends Service implement SDKCallback{ 

... 

void callSDK(){ 

    Looper.prepare(); 
    SDK.run(); //Does thing I don't know about 
} 

@Override 
SDKCallback(){ 

    startActivity(new Intent(this, MyActivity.class); 

} 


} 
+0

コードを投稿できますか? – varunkr

+0

ちょうどやったけど、助けても分かりません。問題は実際にハンドラ間の相互作用から来ています。ルーパーとUIスレッド。 – Laetan

答えて

1

あなたはLooper.prepare()を呼び出すために持っていけません。あなたのワーカースレッドでLooper.prepare()を入れた場合、それはあなたの最初のクラッシュの問題を解決します

new Handler(Looper.getMainLooper()) { 
    @Override 
    public void handleMessage(Message message) { 

    } 
}; 

、このコードはHandlerを作成しよう[スレッドがLooper.prepare()を呼び出していません]。しかしUIスレッドではないので、次に始めることはできませんActivity

上記のコードは、UIスレッドにHandlerを作成します。だから次はActivityから始めることができます。

編集:これを試してください。

@Override 
SDKCallback(){ 

    new Handler(Looper.getMainLooper()) { 
     @Override 
     public void handleMessage(Message message) { 
      startActivity(new Intent(MyService.this, MyActivity.class)); 
     } 
    }; 


} 
+0

できません。私はハンドラを作成する人ではありません。 SDKは機能し、私はそのコードにアクセスできません。ハンドラがアクセスすることなく使用するルーパを変更する方法はありますか? – Laetan

+0

あなたのコードを投稿できますか? – Bob

+0

答えを更新しました。 SDKCallbackの中にハンドラを作成してみてください。 @Laetan – Bob

関連する問題