AsyncTaskを使用してUIをフリーズさせないためにバックグラウンドスレッドでたくさんのコードを実行しています。 AsyncTaskの結果はOKで、その結果をonPostExecuteで使用できます。 しかし、asyncTaskを初期化して実行した後のAsyncTaskの外側は、バックグラウンドスレッド上にあるため、結果にアクセスできません。例AsyncTaskが完了するまで、ゲッターまたは通常のメソッドを待つ方法
ファーストクラスで@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyObject mObject = new Myobject(getApplicationContext());
mObject.getStart();
mObject.getResult();
}
public class MyObject extends Parent{
Context context;
public MyObject (Context context, long startTimeStamp) {
super();
this.context = context;
setStart(startTimeStamp);
MyAsyncTask async = new MyAsyncTask();
async.execute("");
}
private Object myTestMethod() {
if(true)
return true;
return false;
}
private class MyAsyncTask extends AsyncTask<String, Void, Object> {
@Override
protected Object doInBackground(String... strings) {
return myTestMethod();
}
@Override
protected void onPostExecute(Object o) {
setResult(o);
}
}
}
public class Parent{
private long start;
private Object result;
public long getStart() {
return start;
}
public void setStart(long start) {
this.start = start;
}
public Object getResult() {
return result;
}
public void setResult(Object result) {
this.result = result;
}
}
ため 私はそれがのStartTimeを返すスーパークラスからgetStart()
を呼び出し、良いを動作しますが、ときに私に電話するAsyncTaskは背景で働いているので、、それはヌルを返し、私が検索し、このしかし
try {
MyAsyncTask async = new MyAsyncTask();
setResult(async.execute().get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
それは待ってフォアグラウンドを凍結しますを発見しました。
AsyncTaskは、タスクを完了するまで待機し、その後、結果 または任意の他の提案 を返すために、私のセッターメソッドのいずれかの解決策がある場合の例は不明であったならば、私は
を聞いて喜んでいますが、明確にするために私をコメント
回答ありがとうございます。 私はすでにこれを知っていました。 私の質問は、私の 'getResult()'が言っている方法はありますか?バックグラウンドプロセスがマルチスレッドのように動作するまで停止しますか? もしあなたが私の 'getResult()'を呼び出すときに何を示唆していなければ、私はnullであってはいけません! – Martin
私が考えることができる唯一の事は単純なヌルチェックです。 – kyo171