我正在使用示例应用程序中的线程。在我的应用程序中,我使用3个线程在无限循环中运行。这3个线程在android服务类中使用。当我启动这些线程然后线程正在运行并且UI是直到完成无限循环才允许。但是我如何停止线程以及如何处理UI?
我写了一个服务类如下:
ServiceApp.java
public class ServiceApp extends Service
{
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
while(true)
{
Thread child1=new Thread(new Runnable() {
@Override
public void run() {
try {
function1();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
child1.start();
Thread child2=new Thread(new Runnable() {
@Override
public void run() {
try {
function2();
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
});
child2.start();
Thread child3=new Thread(new Runnable() {
@Override
public void run() {
try {
function3();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
child3.start();
Toast.makeText(ServiceApp.this, "All threads started", Toast.LENGTH_SHORT).show();
}
}
public void function1() throws InterruptedException
{
Generic generic=new Generic(); //this for connect to web services
String add=generic.getAdd(10,20);
Log.v("function1", "addition from service"+add);
Thread.sleep(1000);
}
public void function2() throws InterruptedException
{
Generic generic=new Generic(); //this for connect to web services
String sub=generic.getSub(34,20);
Log.v("function2", "subtraction from service"+sub);
Thread.sleep(1000);
}
public void function3() throws InterruptedException
{
Generic generic=new Generic(); //this for connect to web services
String mul=generic.getMul(4, 6);
Log.v("function3", "multipicationn from service"+mul);
Thread.sleep(1000);
}
}
如何从活动类中停止child1,child2,child3线程?
请任何人帮帮我吗?
答案 0 :(得分:1)
Service.onCreate()
在UI线程内执行。你有一个无限循环,不断创建越来越多的线程,因此UI没有机会响应用户的行为。如果你真的打算拥有这么多线程,你需要创建另一个可以启动原始线程的线程。
活动可以通过Binder与您的服务进行通信(您需要在那里返回实际的实现而不是null
)或发送意图,您可以在Service.onStart()
}中搜索和处理这些意图p>