2017-05-27 12 views
-1

ブロードキャストレシーバオブジェクトでアクティビティ関数を呼び出す際に問題があります。それ自体はそこ走るトーストがあるので、実行が流れないが、アクティビティ機能ブロードキャストレシーバオブジェクトでアクティビティ関数が呼び出されない

protected void onCreate() 
    { 
     ... 
     ... 
     this.registerReceiver(receiver, new IntentFilter("ACTION")); 

    } 

    BroadcastReceiver receiver = new BroadcastReceiver() { 

    Toast.makeText(MainActivity.this, "Printed", Toast.LENGTH_LONG).show(); // This runs 

    FunctionA(); // <-- This function is not called 
    }; 

    public void FunctionA() 
    { 
    ... // Function holds view objects 
    } 

呼び出されていない私は周りを見回したと任意の運

 BroadcastReceiver receiver = new BroadcastReceiver() { 

      Toast.makeText(MainActivity.this, "Printed", Toast.LENGTH_LONG).show(); //<--- This runs fine   

      MainActivity.this.runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 

       FunctionA(); // <-- Function still is not called 

      } 
     }); 

    } 
ずにレシーバ・オブジェクト内でこのような何かを試してみました

質問はなぜ関数が呼び出されていないのですか?その放送受信オブジェクトの関数を呼び出す方法はありますか?

+0

「機能」が呼び出されていないことをどのように判断していますか? *正確に 'FunctionA()'は何をしますか? – CommonsWare

+0

この関数は、UIのビューを変更する役割を担います。 Logcatには印刷されていないLogsもあります。 – Czar

答えて

1

お客様のコードは、BroadcastReceiveronReceive()メソッドに含まれていません。 onReceive()は、ブロードキャストが到着したときに呼び出されるものです。

現状ではBroadcastReceiverがをインスタンス化されるとき、あなたのコードが実行されています。それはあなたが望むものとは思えません。

さらに一般的には、システムブロードキャストを受信して​​BroadcastReceiverを使用することは、解決しようとしている問題があれば、適切な解決策です。 LocalBroadcastManagerまたは他の形式のイベントバスがインプロセスメッセージングのためのより良い解決策です。

+0

アドバイスをいただきありがとうございます、あなたのアイデアは実際に働いた。 LocalBroadcastManagerではなく、代わりにEventbusを使用しました。 – Czar

関連する問題