【问题标题】:Android Callable安卓可调用
【发布时间】:2014-01-26 22:23:36
【问题描述】:

如何实现Callable返回布尔值并做点什么?

我需要使用外部线程连接到 FTP 服务器,我不能在主要活动中这样做,我需要返回值来知道它是否已连接;

[主活动]

public class doSomething implements Callable<Boolean> {

   @Override
   public Boolean call() throws Exception {
       // TODO something...
       return value;
   }

}

public void onClick(View view) {
    ExecutorService executor = Executors.newFixedThreadPool(1);
    FutureTask<Boolean> futureTask = new FutureTask<Boolean>(new doSomething());
    executor.execute(futureTask);
}

【问题讨论】:

标签: java android callable executor


【解决方案1】:

您可以像在任何其他 Java 程序中一样在 Android 中使用 Callable,即

    ExecutorService executor = Executors.newFixedThreadPool(1);
    final Future<Boolean> result = executor.submit(callable);
    boolean value = result.get()

但请注意,get() 方法会阻塞主线程,这是不推荐的。

对于您的用例,您应该改用AsyncTask。例如,

public class FTPConnection extends AsyncTask<Void, Void, Boolean> {

    @Override
    protected boolean doInBackground(Void... params) {
          //Connect to FTP
    }

    @Override
    protected void onPostExecute(boolean connected) {
         //Take action based on result
    }
}

【讨论】:

    【解决方案2】:

    你应该:

    static public class doSomething implements Callable<Boolean> {
    
        @Override
        public Boolean call() throws Exception {
            // TODO something...
            return Boolean.FALSE;
        }
    }
    
    doSomething task = new doSomething ();
    Future<Boolean> future = executor.submit(task);
    Boolean res = future.get(); // get() will block waiting for result, so dont call it on UI thread
    

    您还必须捕获 ExecutionException、InterruptedException

    就像拉里·希弗的回答一样,您应该研究其他更面向 android 的解决方案来完成它。如果您需要保持 FTP 连接,那么也许 Service 会更好,如果您只需要获取结果,那么 AsyncTask 或 AsyncTaskLoader

    【讨论】:

      【解决方案3】:

      考虑使用AsyncTaskLoaderHandler 对象来完成此操作。

      【讨论】:

        猜你喜欢
        • 2017-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-14
        • 2015-11-12
        相关资源
        最近更新 更多