【问题标题】:Asynctask and Handler class - can't share variableAsynctask 和 Handler 类 - 不能共享变量
【发布时间】:2015-04-01 14:02:02
【问题描述】:

我有一个包含 Asynctask 和 Handler 类的服务。 AsyncTask 和 Handler 应该共享一个变量。我使用静态 volatile 变量isSendMessage 因为我认为有两个线程,但我不确定。问题是while循环中的变量没有改变。我不知道我的错误在哪里。这是我的代码的 sn-p。

    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;              
            }
        }


    }

【问题讨论】:

    标签: java android service android-asynctask volatile


    【解决方案1】:

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

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

    【讨论】:

    • Asynctask 类用于连接到服务器。我需要处理程序,因为我想将数据从活动发送到服务,并且服务 Asynctask 将数据发送到服务器。
    • 您可以在活动的最顶部声明​​ static Boolean isSendMessage = false 作为全局变量。这应该允许它被共享。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2017-08-19
      • 1970-01-01
      • 1970-01-01
      • 2020-10-14
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多