Android - 在启动服务之前等待线程执行
Android - Wait for a thread to execute before starting a service
在我的应用程序中,我使用了一项使用从服务器加载的字典的服务。在调用服务之前,我在一个单独的线程中加载字典。我想知道如何在字典完全加载后才启动服务,因为当我尝试访问服务中的字典时,它 returns null.
MainActivity.java
onCreate(){
...
doFunction();
Intent intent = new Intent(this, ServiceA.class);
startService(intent);
}
private void doFunction(){
ClassThread().getInstance().process();
}
ClassThread.java
public class ClassThread{
....
public void process(){
final Handler handler = new Handler(new Handler.Callback(){
@Override
public boolean handleMessage (Message msg){
if(msg.arg1 == 1){
loadDictionary();
}
return false;
}
});
final Message message = new Message();
new Thread(){
public void run(){
message.arg1 = 1;
handler.sendMessage(message);
}
}.start();
您可以使用 Android 的 AsynchTask!
我可以建议另一种方法:为什么不使用 AsyncTask
而不是 Thread
呢?在doInBackground()
中加载字典数据,在onPostExecute()
中调用startService()
。不需要混乱的线程同步。
AsyncTask
抽象被设计为与 Android 的单 UI 线程策略结合使用,以避免这些尴尬的同步问题。
在我的应用程序中,我使用了一项使用从服务器加载的字典的服务。在调用服务之前,我在一个单独的线程中加载字典。我想知道如何在字典完全加载后才启动服务,因为当我尝试访问服务中的字典时,它 returns null.
MainActivity.java
onCreate(){
...
doFunction();
Intent intent = new Intent(this, ServiceA.class);
startService(intent);
}
private void doFunction(){
ClassThread().getInstance().process();
}
ClassThread.java
public class ClassThread{
....
public void process(){
final Handler handler = new Handler(new Handler.Callback(){
@Override
public boolean handleMessage (Message msg){
if(msg.arg1 == 1){
loadDictionary();
}
return false;
}
});
final Message message = new Message();
new Thread(){
public void run(){
message.arg1 = 1;
handler.sendMessage(message);
}
}.start();
您可以使用 Android 的 AsynchTask!
我可以建议另一种方法:为什么不使用 AsyncTask
而不是 Thread
呢?在doInBackground()
中加载字典数据,在onPostExecute()
中调用startService()
。不需要混乱的线程同步。
AsyncTask
抽象被设计为与 Android 的单 UI 线程策略结合使用,以避免这些尴尬的同步问题。