Android AIDL StartProcess无法正常工作

时间:2013-11-21 07:44:58

标签: java android web-services aidl

我有一项活动,我在后台打电话给服务,我是AIDL的新手

我的代码如下:

活动

//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);
 }

我的问题是为什么Toast没有显示?我错过了一些启动过程无效的东西吗?

任何帮助?

1 个答案:

答案 0 :(得分:1)

你应该从UIThread显示Toasts,使用TimerTask会使它在一个单独的线程上运行。

尝试将Toast的runnable发布到处理程序。