Asynctask 和 Handler class - 无法共享变量
Asynctask and Handler class - can't share variable
我有一个包含 Asynctask 和 Handler 的服务 类。 AsyncTask 和 Handler 应该共享一个变量。我使用静态volatile变量isSendMessage
是因为我认为有两个线程,但我不确定。问题是 while 循环中的变量没有改变。我不知道我的错误在哪里。这是我的代码片段。
public class Services extends Service {
static volatile boolean isSendMessage = false;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand (Intent intent, int flags, int startId) {
new ConnectionServerAsyncTask().execute();
return Service.START_STICKY;
}
public class ConnectionServerAsyncTask extends AsyncTask<Void, Result, Void> {
private boolean finish = false;
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
while(!finish){
Log.i("isSendMessage",String.valueOf(isSendMessage));
}
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
}
}
public static class MessageHandler extends Handler{
@Override
public void handleMessage(Message msg) {
Log.i("MessageHandler","handleMessage");
isSendMessage = true;
}
}
}
尝试移除 static volatile。
将其替换为 boolean isSendMessage = false;
onPostExecute() 自动使用 UI 线程,因此实际上不需要将处理程序与异步任务结合使用。只需像在其他任何地方一样编写要在那里执行的代码。
同样对于循环 while(!finish),我没有看到任何地方将 finish 设置为 true。
我有一个包含 Asynctask 和 Handler 的服务 类。 AsyncTask 和 Handler 应该共享一个变量。我使用静态volatile变量isSendMessage
是因为我认为有两个线程,但我不确定。问题是 while 循环中的变量没有改变。我不知道我的错误在哪里。这是我的代码片段。
public class Services extends Service {
static volatile boolean isSendMessage = false;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand (Intent intent, int flags, int startId) {
new ConnectionServerAsyncTask().execute();
return Service.START_STICKY;
}
public class ConnectionServerAsyncTask extends AsyncTask<Void, Result, Void> {
private boolean finish = false;
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
while(!finish){
Log.i("isSendMessage",String.valueOf(isSendMessage));
}
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
}
}
public static class MessageHandler extends Handler{
@Override
public void handleMessage(Message msg) {
Log.i("MessageHandler","handleMessage");
isSendMessage = true;
}
}
}
尝试移除 static volatile。
将其替换为 boolean isSendMessage = false;
onPostExecute() 自动使用 UI 线程,因此实际上不需要将处理程序与异步任务结合使用。只需像在其他任何地方一样编写要在那里执行的代码。
同样对于循环 while(!finish),我没有看到任何地方将 finish 设置为 true。