Service和IntentService中显示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。
半切面包和全切面包有什么区别
roast是专门指“烤”的单词,属于动词或形容词词性,用做名词专指烤肉、烧烤饭。
bake除了“烤”的意思之外,还有“烘焙,因受热而发干发硬‘的意思,且只有动词词性
toast专门指烤面包片、吐司,另外还有干杯、祝酒、敬酒之意,且只有名词词性。
barbecue用作名词专指户外烧烤炉或者烧烤架,还有户外烧烤会的意思,用作动词专指烤牛排。
半切面包和全切面包没有区别。切片面包是面包的一种,面包切成片,经过烤的之后,才能被叫做吐司。所以严格来说,吐司是面包再加工后的产物。他们的区别不大。
1、吐司是英文toast的音译(粤语广东话叫多士),实际上就是用长方形带盖或不带盖的烤听制作的听型面包。用带盖烤听烤出的面包经切片后呈正方形,夹入火腿或蔬菜后即为三明治。用不带盖烤听烤出的面包为长方圆顶形,类似我国的长方形大面包。
2、面包切成片,经过烤的之后,才能被叫做吐司。所以严格来说,吐司是面包再加工后的产物。国内说的土司面包在美国就叫bread,所谓的土司面包(toast)指的是在面包上涂上一层蒜泥或是奶油下去烤的面包才叫toast。
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!