2013-02-20 69 views

回答

0

那是因为,控制已经到服务,它将不会返回,直到它完成。因此,只有在您的服务完成后,您的活动才会呈现。 More Info

解决方法是使用AsyncTask

0

一个简单的示例服务,使您明确如何使用它。

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.util.Log; 
import android.widget.Toast; 

public class ServiceTimeToast extends Activity { 
    /** Called when the activity is first created. */ 

    public static MyHandler myHandler; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Intent intent = new Intent(ServiceTimeToast.this,ServiceManagement.class); 
     startService(intent); 
     myHandler = new MyHandler(); 
    } 

    class MyHandler extends Handler 
    { 
     @Override 
     public void handleMessage(Message msg) { 
      // TODO Auto-generated method stub 
      super.handleMessage(msg); 


      if (msg.what == 111) { 
       //int count = Integer.parseInt(msg.obj); 
       int count = (Integer) msg.obj; 
       Log.i("MyLog", "Service Running Started"+count); 
       Toast.makeText(ServiceTimeToast.this, "Service Running properly::"+count, Toast.LENGTH_SHORT).show(); 
      } 

     } 
    } 
} 

ServiceManagement.java //服务类

import android.app.Service; 
import android.content.Intent; 
import android.os.IBinder; 
import android.os.Message; 
import android.util.Log; 

public class ServiceManagement extends Service { 

    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     // TODO Auto-generated method stub 
     super.onCreate(); 
     Log.v("MyLog", "OnCreate of the Service management called"); 


    } 

    @Override 
    public void onDestroy() { 
     // TODO Auto-generated method stub 
     super.onDestroy(); 
     Log.v("MyLog", "OnDestroy of the Service management called"); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     // TODO Auto-generated method stub 
     Log.v("MyLog", "onStartCommand of the Service management called"); 

     ThreadTime t = new ThreadTime(); 

     Thread thread = new Thread(t); 
     thread.start(); 

     return super.onStartCommand(intent, flags, startId); 
    } 

} 


class ThreadTime implements Runnable 
{ 
    int MAX_SEC = 5; 
    //MyHandler handler = new MyHandler(); 


    @Override 
    public void run() { 
     // TODO Auto-generated method stub 
     Log.i("MyLog", "Thread Started!!"); 
     int count = 0; 
     for(int i = 0;i<MAX_SEC;i++) 
     { 
      try { 
       Log.i("MyLog", "Inside the For loop!!!!!!"); 

       Message message = ServiceTimeToast.myHandler.obtainMessage(111); 
       message.obj = ++count; 

       ServiceTimeToast.myHandler.sendMessage(message); 

      } catch (Exception e) { 
       // TODO Auto-generated catch block 

      } 
     } 
    } 

}