2011-04-13 63 views
0

当应用程序崩溃这是我的服务类:Android的服务......让敬酒

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

请发表您的logcat输出(logcat的视图Eclipse或在shell'ADB logcat') – 2011-04-13 15:38:03

+0

你肯定崩溃在Toast.makeText()?你尝试调试吗? – yogsma 2011-04-13 15:38:21

回答

3

TimerTaskrun()方法不会在UI线程中执行,因此您不能执行UI相关的操作,例如创建Toast

调查使用HandlerrunOnUiThread()来代替。

例子:

final Handler handler = new Handler(); 
    TimerTask task = new TimerTask() { 
    @Override 
    public void run() { 
     handler.post (new Runnable(){ 
      @Override 
      public void run() { 
       Toast.makeText(c, "Not a beautyfull day today...", Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 
+0

也看这个链接:http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html – Olegas 2011-04-13 15:43:28

1

你不能在另一个线程敬酒,你可以使用一个处理器来做到这一点,或使用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(); 
}