我想点击“开始”'按钮,以便应用程序可以同时启动和运行两个服务。
我创建了两个名为ServiceA
和ServiceB
的服务。对于每项服务,我都是
创建了一个runnable方法(在onStartCommand
中)以逃避ANR问题。我还创建了一个开始按钮,因此当我单击开始按钮时,我希望ServiceA
和ServiceB
可以在完全相同的时间开始,或者换句话说,同步。
我尝试了很多方法。第一次尝试只是逐个启动服务,但失败了:
startButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent1 = new Intent(MainActivity.this, ServiceA.class);
startService(intent1);
Intent intent2 = new Intent(MainActivity.this, ServiceB.class);
startService(intent2);
}
});
然后我打算尝试AsyncTask
,但由于服务是在后台使用处理程序运行的,如果我使用AsyncTask
,它将创建另一个后台处理程序,这是不适用的。您是否有任何建议在完全相同的时间点击一个按钮运行两个服务?
答案 0 :(得分:0)
您需要研究java并发和多线程。如果您希望并行运行这两种方法,则必须使用线程...
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
codeHereWillRunConcurrentlyWithMainThread();
}
});
thread1.start();
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
codeHereWillAlsoRunConcurrentlyWithMainThread();
}
});
thread2.start();
但是,如果你的两个线程应该一起工作,你需要查找如何使用java内置的"同步"关键词。它用于防止多线程并发环境中的死锁,并防止在其他线程对所述变量/变量进行操作时修改变量/变量。
欲了解更多信息: https://docs.oracle.com/javase/tutorial/essential/concurrency/ http://winterbe.com/posts/2015/04/07/java8-concurrency-tutorial-thread-executor-examples/ http://www.vogella.com/tutorials/JavaConcurrency/article.html