2013-11-21 69 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