这是我的服务类:
public class MySrv extends Service {
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
final Context c = getApplicationContext();
Timer t = new Timer("mytimer");
TimerTask task = new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
Toast.makeText(c, "Not a beautyfull day today...", Toast.LENGTH_SHORT).show();
}
};
t.schedule(task, 5000, 6000);
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
}
应用程序在Toast.makeText()崩溃......那么我做错了什么?
答案 0 :(得分:3)
TimerTask
的{{1}}方法未在UI线程中执行,因此您无法执行与UI相关的操作,例如创建run()
。
使用Toast
或Handler
进行调查。
示例:
runOnUiThread()
答案 1 :(得分:1)
这里的问题是你正在尝试更新计时器线程中的UI,你应该使用一个处理程序。
答案 2 :(得分:1)
你不能在另一个线程中制作Toast,你可以使用Handler来做或使用runOnUiThread。
public class YourActivity extends Activity {
private Handler toastTeller;
public void onCreate(Bundle savedInstance) {
super.onCreate(savedInstance);
toastTeller = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == 2)
Toast.makeText(LibraryActivity.this, msg.obj.toString(),
Toast.LENGTH_LONG).show();
super.handleMessage(msg);
}
};
new Thread(new Runnable(){
public void run(){
Message msg = new Message();
msg.what = 2;
msg.obj = "Your item was downloaded.";
toastTeller.sendMessage(msg);
}
}).start();
}