2013-11-21 28 views
0

我有我称之为服务后台的活动,我很新的AIDL的Android AIDL StartProcess不工作

我的代码如下:活动

//declaration 
private Intent mIntentInvenueService; 
private IInvenueService mIInvenueService; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
mIntentInvenueService = new Intent(this, InvenueService.class); 
    startService(mIntentInvenueService); 
} 
private final ServiceConnection mServiceConnection = new ServiceConnection() { 
    @Override 
    public void onServiceConnected(ComponentName name, IBinder service) { 
     mIInvenueService = IInvenueService.Stub.asInterface(service); 
     try { 
      mIInvenueService.registerCallback(mCallback); 
     } catch (RemoteException e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void onServiceDisconnected(ComponentName name) { 
     mIInvenueService = null; 
     try { 
      mIInvenueService.unregisterCallback(mCallback); 
     } catch (RemoteException e) { 
      e.printStackTrace(); 
     } 
    } 
}; 

private final IInvenueServiceCallback.Stub mCallback = new IInvenueServiceCallback.Stub() { 
    @Override 
    public void onReceiveResponse() throws RemoteException { 
     runOnUiThread(new Runnable() { 
      public void run() { 
       if (flagChanged){ 

       } 
       else 
       { 
        cAdapter.notifyDataSetChanged(); 
       } 

      } 
     }); 
    } 
}; 
    public void onResume() { 
    super.onResume(); 
    bindService(mIntentInvenueService, mServiceConnection, BIND_AUTO_CREATE); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    unbindService(mServiceConnection); 
    unregisterReceiver(mBroadcastReceiver); 
} 

ON MY SERVICE:

private final RemoteCallbackList<IInvenueServiceCallback> mCallbacks = new RemoteCallbackList<IInvenueServiceCallback>(); 
private boolean isUpdated = false; 
@Override 
public IBinder onBind(Intent intent) { 
    return mBinder; 
} 

private final IInvenueService.Stub mBinder = new IInvenueService.Stub() { 
    @Override 
    public void startProcess() throws RemoteException { 
     Timer timer = new Timer(); 
     timer.schedule(new TimerTask() { 
      public void run() { 
       Toast.makeText(......).show()// Toast Here 
      } 
     }, 60000, 60000); 
    } 



    @Override 
    public void unregisterCallback(IInvenueServiceCallback callback) 
      throws RemoteException { 
     mCallbacks.unregister(callback); 
    } 

    @Override 
    public void registerCallback(IInvenueServiceCallback callback) 
      throws RemoteException { 
     mCallbacks.register(callback); 

    } 

}; 

我AIDL:

interface IInvenueService { 
void startProcess(); 
void registerCallback(IInvenueServiceCallback callback); 
void unregisterCallback(IInvenueServiceCallback callback); 
} 

我的问题是为什么会这样吐司没有显示?我错过了一些启动过程不起作用的东西吗?

任何帮助?

回答

1

你应该表现出从UIThread敬酒,使用TimerTask将导致它在一个单独的线程上运行。

尝试发布可运行与Toast的处理程序。

+0

其实我要调用的AsyncTask的是,主要的问题是,StartProcess SI没有被调用原因计时器就不会调用 – Androyds

+0

凡在活动叫你startProcess? –

+0

我该怎么做先生?这是我所缺少的? – Androyds