Java Android:如果在方法中调用AsyncTask.execute(new Runnable()),则重写onPostExecute()
我想在后台线程上执行一个方法:Java Android:如果在方法中调用AsyncTask.execute(new Runnable()),则重写onPostExecute(),java,android,android-asynctask,Java,Android,Android Asynctask,我想在后台线程上执行一个方法: public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); foo(); } public static void foo(){ Asyn
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
foo();
}
public static void foo(){
AsyncTask.execute(() -> {
// perform some object creations
});
}
public static void foo2(){
// Method that updates UI (lists and views) which requires the main thread.
}
}
我想在
AsynTask
完成时执行foo2
,即onPostExecute()
。在这种情况下,如何重写onPostExecute()。您不能直接实现,可以通过扩展异步类来实现。这可能会有所帮助,您可以通过类而不是方法来实现。请尝试以下代码段:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
foo asyncTask=new foo();
asyncTask.execute();
}
private class foo extends AsyncTask<void, void, void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void doInBackground(String... strings) {
}
@Override
protected void onPostExecute() {
super.onPostExecute();
foo2 asyncTask=new foo2();
asyncTask.execute();
}
}
private class foo2 extends AsyncTask<void, void, void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void doInBackground(String... strings) {
}
@Override
protected void onPostExecute() {
super.onPostExecute();
}
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
foo asyncTask=new foo();
asyncTask.execute();
}
私有类foo扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的void doInBackground(字符串…字符串){
}
@凌驾
受保护的void onPostExecute(){
super.onPostExecute();
foo2 asyncTask=newfoo2();
asyncTask.execute();
}
}
私有类foo2扩展了异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的void doInBackground(字符串…字符串){
}
@凌驾
受保护的void onPostExecute(){
super.onPostExecute();
}
}
这是我的工作
public class MyTask extends AsyncTask<String, Void, String>
{
@Override
protected Void doInBackground(String... params) {
//Do background
}
protected void onPostExecute() {
foo2();
}
}
void foo2(){
//your function
}
公共类MyTask扩展了AsyncTask
{
@凌驾
受保护的Void doInBackground(字符串…参数){
//做背景
}
受保护的void onPostExecute(){
foo2();
}
}
void foo2(){
//你的职能
}
如果要在异步任务完成后执行某些功能,
您还可以从onPostExecute中更新UI,这更简单
如果对你有用的话
使用AsyncTask.execute(Runnable)
您不能覆盖onPostExecute
。您应该创建一个新的AsyncTask
,或者创建扩展AsyncTask
的类。