Android Service ...应用程序在制作Toast时崩溃

时间:2011-04-13 15:35:23

标签: android service crash

这是我的服务类:

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()崩溃......那么我做错了什么?

3 个答案:

答案 0 :(得分:3)

TimerTask的{​​{1}}方法未在UI线程中执行,因此您无法执行与UI相关的操作,例如创建run()

使用ToastHandler进行调查。

示例:

runOnUiThread()

答案 1 :(得分:1)

这里的问题是你正在尝试更新计时器线程中的UI,你应该使用一个处理程序。

阅读How to display toast inside timer?

答案 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();
}