使用处理程序发布的IntentService Toast在onHandleIntent中创建处理程序时不会显示

时间:2014-02-10 16:03:43

标签: android toast intentservice android-intentservice

如果设备检测到加速度计,我正在尝试从IntentService显示吐司。为此,我搜索并了解到我可以实现一个Handler。但是,它并不是很有效。代码在模拟器上编译并运行,没有任何错误,但是toast没有显示。我想知道我是否可以获得一些帮助来发现我的代码中的错误。代码如下所示。

任何帮助将不胜感激!

public class AccelService extends IntentService implements SensorEventListener{
    private SensorManager mySensorManager;
    private Handler toastHandler;

    public AccelService(){
        super("AccelerometerIntentService");
    }
    ...
    private class ToastRunnable implements Runnable{
        String toastText;
        public ToastRunnable(String text){
            toastText = text;
        }
        @Override
        public void run(){
            Toast.makeText(getApplicationContext(), toastText, Toast.LENGTH_SHORT).show();
        }
    }
    @Override
    protected void onHandleIntent(Intent intent){
        toastHandler = new Handler();
        initialize();
    }
    public void initialize(){
        mySensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        if(mySensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) != null){
            toastHandler.post(new ToastRunnable("Accelerometer Detected!"));
        }
    }
    ...
}

1 个答案:

答案 0 :(得分:1)

onHandleIntent中为Toast消息创建处理程序将其绑定到错误的线程:

  

此方法在工作线程上调用并处理请求。

显式设置处理程序的线程,例如new Handler(getMainLooper())或在onCreate中创建处理程序。