如何在新线程中启动服务?

如何在新的线程中启动我的服务? 我看了其他问题,但它为我工作。 正常运行时和在单独的线程中运行时,需要对服务进行哪些更改?

Solutions Collecting From Web of "如何在新线程中启动服务?"

将你的public void onStart(final Intent intent, final int startId)方法重命名为_onStart并使用这个新的onStart实现:

  @Override public void onStart(final Intent intent, final int startId) { Thread t = new Thread("MyService(" + startId + ")") { @Override public void run() { _onStart(intent, startId); stopSelf(); } }; t.start(); } private void _onStart(final Intent intent, final int startId) { //Your Start-Code for the service } 

对于API级别5和以上

public void onStart(Intent, int)在API级别5已被弃用。应该用public int onStartCommand(Intent, int)

 @Override public int onStartCommand(final Intent intent, final int startId){ //All code from 'onStart()' in above placed here as normal. } private void _onStart(final Intent intent, final int startId) { //Your Start-Code for the service } 

我不认为你可以在一个新的线程开始你的服务,但你可以做的是开始一个新的线程在您的服务。

这是因为像活动一样,服务具有在主线程上运行的生命周期方法。

所以你的服务将在主线程上运行,但是它将会在它需要的时候创build一个新的线程。

我希望这有助于..

引用从http://developer.android.com/reference/android/app/Service.html

“请注意,与其他应用程序对象一样,服务运行在托pipe进程的主线程中,这意味着,如果您的服务要执行任何CPU密集型(如MP3播放)或阻塞(如联网)操作,应该生成自己的线程来完成这个工作,有关这方面的更多信息可以在Processes和Threads中find,IntentService类可以作为Service的标准实现来使用,它有自己的线程来完成它的工作。

在我的项目中,我有这样的人,这是工作:

 Thread welcomeThread = new Thread() { @Override public void run() { try { super.run(); while (isMyServiceRunning() != true) { sleep(100); } } catch (Exception e) { System.out.println("EXc=" + e); } finally { Intent i = new Intent(getApplicationContext(), MainPage.class); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(i); } } }; welcomeThread.start();