,則不應使用。獲得()如果異步任務是要採取任何時間體面的數量(通常是這樣)。相反,你可以使用消息/處理程序/服務/ etc,或者你可以簡單地使用onPostExecute(Result)方法。
編輯:新代碼。根據你的描述,你似乎需要使用一個界面。
如果你需要在另一個類中有Asynctask,那麼接口可能是你最好的選擇。
TestTask.java(你單獨的AsyncTask):
import android.os.AsyncTask;
// Remember to change object type <> to what you need
public class TestTask extends AsyncTask<Object,Object,Object> {
public interface OnTaskCompleted{
void onTaskCompleted();
}
private OnTaskCompleted listener;
public TestTask(OnTaskCompleted listener){
this.listener = listener;
}
protected void onPostExecute(Object o){
// Call the interface method
if (listener != null)
listener.onTaskCompleted();
}
@Override
protected Object doInBackground(Object... params) {
// The sleep() is just to simulate activity and delay
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
}
MainActivity.java(或任何其他活動):
public class MainActivity extends Activity {
private boolean status = false;
private OnTaskCompleted listener = new OnTaskCompleted() {
public void onTaskCompleted() {
status = true;
Toast.makeText(MainActivity.this, "Status: " + status, Toast.LENGTH_SHORT).show();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toast.makeText(MainActivity.this, "Status: " + status, Toast.LENGTH_SHORT).show();
new TestTask(listener).execute("Testing");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
這與async完全相反。你需要使用回調。 – SLaks
您可以使用廣播接收器或可能事件總線意圖,回調是一個好主意太 –
您可以使它成爲一個內部類,並直接從'onPostExecute(調用'Activity'方法)'或[見這個答案](HTTP:/ /stackoverflow.com/questions/18517400/inner-class-can-access-but-not-update-values-asynctask/18517648#18517648)關於使用'interface'用'AsyncTask' – codeMagic