繁体   English   中英

Android Java AsyncTask在外部工作

[英]Android Java AsyncTask work externally

我是Java / Android的新手,我来自c#。 我一直在研究它,并进行测试,发现当我执行AsyncTask时,主线程会继续执行,而外部任务正在执行它。 我什至发现我只能设置从MainActivity执行外部任务的asynctask。

我的问题是我想执行一个外部类,该类完成后将结果(就像c#一样)返回给maintask而不在MainActivity中设置异步类。

所以..在代码中应该是这样的:

MainActivity.java

public onClickButton(View view) {
    String result = SecondaryClass.DoAsyncTask();
}

SecondaryClass.java

private class DoAsyncTask extends AsyncTask<Long, Integer, Integer> 
{
    @Override
    protected Integer doInBackground(Long... params) {
        String longString = ThirdAPIClass.GiveMeSomeCode(); //Or work here
        return lognString;
    }

    @Override
    protected void onPostExecute(String result) {
        return result; //Somehow(?)
    }
}

知道Java / Android中是否有类似的东西吗?

PD:我以AsyncTask为例,我不知道是否有另一条指令执行相同或类似的操作。

类特征:

首先要注意的是,如果您的结果是字符串,那么您需要将extend子句更改为:

class DoAsyncTask extends AsyncTask<Long, Integer, String>

与通话活动进行通信:

AsyncTaskonPostExecute签名void ,并且不返回数据。 最常见的做法是:

  1. 要将此类作为活动内部的内部类以及onPostExecute ,可以在该活动内部调用一个方法。

  2. 向您的asyncTask类添加一个构造函数,并将活动传递给它,然后使用该活动实例调用该方法。

第一种方法:

@Override
protected void onPostExecute(String result) {
        someMethodInMainActivity(result);
    }

第二种方法:

public class DoAsyncTask extends AsyncTask<Long, Integer, String> 
{
     YouActivityName  _activity;
     public DoAsyncTask(YouActivityName activity)
     {
        _activity = activity;
     }

     @Override
     protected String doInBackground(Long... params) {
        String longString = ThirdAPIClass.GiveMeSomeCode(); //Or work here
        return lognString;
     }

     @Override
     protected void onPostExecute(String result) {

        if(_activity != null) {
          _activity.someMethodInMainActivity(result);
        }
     }
}

然后,使用以下命令创建AsynTask:

new DoAsyncTask(this);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM