Asynctask和Handler类 - 不能共享变量

时间:2015-04-01 14:02:02

标签: java android service android-asynctask volatile

我有一个包含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;              
            }
        }


    }

2 个答案:

答案 0 :(得分:0)

尝试删除静态volatile。 将其替换为boolean isSendMessage = false;

答案 1 :(得分:0)

onPostExecute()自动使用UI线程,因此实际上不需要将处理程序与异步任务结合使用。只需编写您想要在其他地方执行的代码。

同样对于循环while(!finish),我没有看到任何将finish设置为true的地方。