【发布时间】:2016-04-15 20:01:11
【问题描述】:
我是android新手。我花了太多时间解决这个问题,但没有成功。
所以我有服务Serv.java。
public class Serv extends Service {
private String a = "aa";
private String b = "bb";
private String c = "100";
//called by some class.
public void setcc(String s) {
c=s;//c="cc"
}
//Using alarm manager to start the service.
//I call function callMe from OnStart.
void callMe(Context context){
//which calls an async task
new VAsyncTask().execute("");
}
private class VerifyCPIAsyncTask extends AsyncTask<String, Void, Void> {
protected void onPreExecute() {
}
protected Void doInBackground(String... urls) {
//I am able to access a and b.(aa and bb)
//but not c.(It still shows 100 and not cc)
}
........
}
但是当我再次运行相同的服务时,它显示 c(cc) 的正确值。我第一次访问时出现问题。
编辑-如果我将私有字符串 c 设置为私有静态字符串 c,则流程可以正常工作。 而且我已经在我的 onCreate 和 onStartCommand 中放置了日志。它们不打印变量 c 的最新值。所以没有用传递(最新)变量 c 来预执行甚至在 aysnctask 中创建构造函数(因为我仍然得到旧的变量 c) 的值。
请帮忙。 谢谢。
【问题讨论】:
-
为什么你不能在
Asynctask中使用Preexecute方法设置你想要的参数? -
在不了解过程并了解您如何利用一切的情况下,我只能假设这是竞争条件或其他东西。
-
嗨,你能看看这个link
标签: android android-asynctask global-variables