扩展Asynctask和外部类的内部类扩展了Activity,然后从另一个Activity扩展外部类。这是一种不好的做法吗?

时间:2013-08-19 02:05:43

标签: java android asynchronous

这是不好的做法吗?

import android.app.Activity;
import android.os.AsyncTask;

public abstract class Asynch extends Activity {
    public abstract void doInBackgroundAbstract();
    public abstract void onPostExecuteAbstract();
    protected class AsynchtaskSubClass extends AsyncTask {
        @Override
        protected Object doInBackground(Object... arg0) {
            doInBackgroundAbstract();
            return null;

        }
        protected void onPostExecute(Object result){
            onPostExecuteAbstract();
        }
    }

}

public class SomeActivity extends Asynch {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_show_classes);
        new AsynchtaskSubClass().execute();
    }
            private Document doc;
        @Override
        public void doInBackgroundAbstract() {
            // NETWORK OPERATION GOES HERE!
            try {
                doc = Jsoup.connect("mySite").get();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
        @Override
        public void onPostExecuteAbstract() {
            // Update UI Thread Here
            TextView myTextView = new TextView(SomeActivity.this);
            myTextView.setText(doc.select("a[href]").attr("abs:href").toString());
            setContentView(myTextView);

        }

这对我来说看起来更干净。我不必继续创建内部异步任务或创建一个单独的类来运行异步任务。如果我想拥有一个我在许多活动中重用的Asynchtask,那么我只需要扩展Asynch并覆盖Abstract方法并将其作为一个单独的类保留。他们做这件事有什么不对吗?我看到的唯一问题是,如果我需要在一个活动中使用两个或更多异步任务。

1 个答案:

答案 0 :(得分:0)

正如您已经指出的那样,您的活动中不能有多个异步任务。除此之外,你的班级只能扩展另一个班级,而不是更多。 因此,如果您想要一个扩展ListActivity并具有异步任务的活动,您必须创建另一个抽象异步(" listActivityAsynch")类等。
另一件事是,通过查看SomeActivity,您的代码对于其他程序员来说是不容易理解的。他们首先要看看Asynch并了解您使用的不常见的设计。如果你是唯一一个使用这段代码的人,那可能就好了。但是如果其他人必须使用它,最好遵循在内部类中进行的常见的android练习。