首页主机toast.maketext(关于Toast.makeText)

toast.maketext(关于Toast.makeText)

编程之家2024-02-09106次浏览

一、Service和IntentService中显示Toast的区别

.表象

toast.maketext(关于Toast.makeText)

Service中可以正常显示Toast,IntentService中不能正常显示Toast,在2.3系统上,不显示toast,在4.3系统上,toast显示,但是不会消失。

2.原因

Toast要求运行在UI主线程中。

Service运行在主线程中,因此Toast是正常的。

IntentService运行在独立的线程中,因此Toast不正常。

3.在IntentService中显示Toast

toast.maketext(关于Toast.makeText)

利用Handler,将显示Toast的工作,放在主线程中来做。具体有两个实现方式。

Handler的post方式实现,这个方式比较简单。

private void showToastByRunnable(final IntentService context, final CharSequence text, final int duration){

Handler handler= new Handler(Looper.getMainLooper());

handler.post(new Runnable(){

@Override

toast.maketext(关于Toast.makeText)

public void run(){

Toast.makeText(context, text, duration).show();

}

});

}

Handler的msg方式实现,这个方式比较复杂。

Handler msgHandler= new Handler(Looper.getMainLooper()){

@Override

public void handleMessage(Message msg){

Toast.makeText(ToastIntentService.this, msg.getData().getString("Text"), Toast.LENGTH_SHORT).show();

super.handleMessage(msg);

}

};

private void showToastByMsg(final IntentService context, final CharSequence text, final int duration){

Bundle data= new Bundle();

data.putString("Text", text.toString());

Message msg= new Message();

msg.setData(data);

msgHandler.sendMessage(msg);

}

4.关于耗时操作

Service中如果有耗时的操作,要开启一个Thread来做。

IntentService是在独立的线程中,所以可以进行一些耗时操作。

5.考虑AsyncTask与Service的使用区别

如果是全后台的工作,使用Service,结果的提示可以使用Notification。

如果是异步工作,工作结束后需要更新UI,那么最好使用Thread或者AsyncTask。

二、我在asynctask里面使用toast但是实际没有提示消息,为什么

Service中可以正常显示Toast,IntentService中不能正常显示Toast,在2.3系统上,不显示toast,在4.3系统上,toast显示,但是不会消失。

2.原因

Toast要求运行在UI主线程中。

Service运行在主线程中,因此Toast是正常的。

IntentService运行在独立的线程中,因此Toast不正常。

3.在IntentService中显示Toast

利用Handler,将显示Toast的工作,放在主线程中来做。具体有两个实现方式。

Handler的post方式实现,这个方式比较简单。

private void showToastByRunnable(final IntentService context, final CharSequence text, final int duration){

Handler handler= new Handler(Looper.getMainLooper());

handler.post(new Runnable(){

@Override

public void run(){

Toast.makeText(context, text, duration).show();

}

});

}

Handler的msg方式实现,这个方式比较复杂。

Handler msgHandler= new Handler(Looper.getMainLooper()){

@Override

public void handleMessage(Message msg){

Toast.makeText(ToastIntentService.this, msg.getData().getString("Text"), Toast.LENGTH_SHORT).show();

super.handleMessage(msg);

}

};

private void showToastByMsg(final IntentService context, final CharSequence text, final int duration){

Bundle data= new Bundle();

data.putString("Text", text.toString());

Message msg= new Message();

msg.setData(data);

msgHandler.sendMessage(msg);

}

4.关于耗时操作

Service中如果有耗时的操作,要开启一个Thread来做。

IntentService是在独立的线程中,所以可以进行一些耗时操作。

5.考虑AsyncTask与Service的使用区别

如果是全后台的工作,使用Service,结果的提示可以使用Notification。

如果是异步工作,工作结束后需要更新UI,那么最好使用Thread或者AsyncTask。

VBTRIM(VB中的trim)百度二级网页打不开(百度二级网页打不开)