Android - 在启动服务之前等待线程执行

时间:2015-03-09 10:30:30

标签: java android multithreading android-asynctask android-service

在我的应用程序中,我使用的服务使用从服务器加载的字典。我在调用服务之前在单独的线程中加载字典。我想知道如何在字典完全加载后启动服务,因为当我尝试访问服务中的字典时,它返回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(); 

2 个答案:

答案 0 :(得分:3)

我可以建议一种替代方法:为什么不使用AsyncTask代替Thread?在doInBackground()中加载字典数据,然后在startService()中调用onPostExecute()。不需要杂乱的线程同步。

AsyncTask抽象旨在与Android的单一UI线程策略结合使用,以避免这些类型的尴尬同步问题。

答案 1 :(得分:0)

您可以使用Android的AsynchTask