Android 如何在新线程中启动服务?
如何在新线程中启动服务。我看了其他问题,但对我来说没什么用。在正常运行和在单独线程中运行时,我需要对我的服务进行哪些更改?在我的项目中,我有这样的人,这是我的工作:Android 如何在新线程中启动服务?,android,android-service,Android,Android Service,如何在新线程中启动服务。我看了其他问题,但对我来说没什么用。在正常运行和在单独线程中运行时,我需要对我的服务进行哪些更改?在我的项目中,我有这样的人,这是我的工作: Thread welcomeThread = new Thread() { @Override public void run() { try { super.run(); while (isMyServiceRunning() != true) { sleep(100
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();
引用
请注意,与其他应用程序对象一样,服务在其宿主进程的主线程中运行。这意味着,如果您的服务要执行CPU密集型(如MP3播放)或阻塞(如联网)操作,则操作时,它应该生成自己的线程来执行该工作。有关这方面的详细信息,请参阅进程和线程。IntentService类是一个标准的服务实现,它在其中有自己的线程来安排要执行的工作。”重命名您的
public void onStart(final Intent Intent,final int startId)
方法以\u 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 onStart命令(Intent,int)
我不认为你可以在一个新的线程中启动你的服务,但是你可以做的是在你的服务中启动一个新的线程 这是因为与活动一样,服务具有在主线程上运行的生命周期方法 因此,您的服务将在主线程上运行,但它将在需要时在它创建的新线程上执行繁重的工作
我希望这会有所帮助。我已经读到:)只是我不知道如何在新线程中运行我的服务。我在这个论坛上尝试了其他问题的代码,但对我来说力不从心。你使用过像这里这样的IntentService吗?或者,您可以像这样创建WorkerThread:私有最终类WorkerThread扩展线程{public Handler;@Override public void run(){Looper.prepare();this.Handler=new Handler(){@Override public void handleMessage(final Message msg){switch(msg.what){case MSG_DO_MY_JOB://…break;case MSG_STOP:YourOuterClass.this.stopSelf();break;}}};Looper.loop();}}在创建服务时启动工作程序,并在需要完成某些操作时向处理程序发送消息。那么,什么呢?将startActivity更改为startService(i);logcat中没有任何内容。事实上,我尝试在没有线程的情况下运行服务,但无论如何它都无法运行…因此我暂时将其保留到星期一…无论如何,非常感谢您的帮助。对于我来说,这次从新线程启动服务,但服务是在旧线程中创建和运行的。这并没有提供问题的答案如果你要求作者澄清,请在他们的帖子下方留下评论。@MD你的意思是什么?它清楚地提供了答案……也许你是指另一篇帖子?
@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
}