在我的应用程序中,我使用的服务使用从服务器加载的字典。我在调用服务之前在单独的线程中加载字典。我想知道如何在字典完全加载后启动服务,因为当我尝试访问服务中的字典时,它返回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();
答案 0 :(得分:3)
我可以建议一种替代方法:为什么不使用AsyncTask
代替Thread
?在doInBackground()
中加载字典数据,然后在startService()
中调用onPostExecute()
。不需要杂乱的线程同步。
AsyncTask
抽象旨在与Android的单一UI线程策略结合使用,以避免这些类型的尴尬同步问题。
答案 1 :(得分:0)
您可以使用Android的AsynchTask!