看到很多讲Activity和Service通信的问题,为什么搞那么复杂呢?Service从一个接口派生,Activity也从一个接口派生,bindService的时候,利用返回的接口,可以调Service的方法,没有问题。在Service实现的接口添加一个函数,传Activity实现的接口进去,Service内部保存这个指针,当Service有事件时,使用这个保存的接口指针调Activity的方法(当然是实现接口的方法),如果仅仅是用Log.d查看字串,没有问题;但是如果使用Activity的方法操作这个函数,程序立马崩溃掉。原因在于,UI和Service是不同的,带UI的Activity只能在它内部自己调用,外部调用立刻出错,不同的Activity也是这样,不能直接互相调。但是UI可以调Service的方法。请问应该用什么方法来同步。

解决方案 »

  1.   


    interface IActivity{
      abstract void OnRecv(String str);
    }
    interface IService{
      abstract void SetString(String str);
      abstract void RegisterCallback(IActivity ia);
    }
    public class Main extends Activity implements IActivity{
      void OnRecv(Strng str){
        Log.d("",str);//如果改成setTitle之类的方法就会出错。
      }
    }
    public class MyService extends Service implements IService{
      private IActivity iActivity = null;  public void SetString(String str){
      }
      public void RegisterCallback(IActivity ia){
        iActivity = ia;
      }
      private void onRecv(){
        iActivity.OnRecv("OK");//回调Activity的方法。
      }
    }
      

  2.   

    应该是权限问题,android禁止非ui线程操作ui