我有一个运行远程服务然后退出的android活动。该服务本身在设备节点上进行轮询并检查更改,我想使用Toast来提醒用户,但是我没有让它起作用。Toast没有显示,过一会儿,Android喊我的应用程序没有响应。顺便说一句,我不想再次开始活动并从那里显示吐司,我只是希望它在显示给用户的当前屏幕上弹出。
服务代码如下:
public class MainService extends Service { // Native methods public native static int GetWiegandCode(); public native static void openWiegand(); public native static void closeWiegand(); static int code = 0; // Other private static final String TAG = MainService.class.getSimpleName(); private Handler handler; @Override public IBinder onBind(Intent intent) { return null; } public void run() { Handler h; while (true) { code = GetWiegandCode(); if (code > 0) { h = new Handler(this.getMainLooper()); h.post(new Runnable() { @Override public void run() { Toast.makeText(getBaseContext(), "ID " + Integer.toString(code) + "Just entered", Toast.LENGTH_LONG).show(); } }); } } } @Override public void onCreate() { super.onCreate(); openWiegand(); Log.i(TAG, "Service Starting"); this.run(); } @Override public void onDestroy() { super.onDestroy(); closeWiegand(); Log.i(TAG, "Service destroying"); } static { System.loadLibrary("wiegand-toast"); } }
您无法通过服务呼叫Toast消息。除了UI线程之外,您不能对UI进行任何操作。您将需要研究从服务中与UI线程进行通信的多种方式之一- BroadcastReciever,Messenger,AIDL等。
对于您想做的事情,您可能不需要走到AIDL路线。签出这个Messenger实施示例,然后从sdk-samples签出完整示例:
http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/MessengerService.html