Java 内部类扩展Asynctask,外部类扩展Activity,然后从另一个Activity扩展外部类。这种做法不好吗?
这是坏习惯吗Java 内部类扩展Asynctask,外部类扩展Activity,然后从另一个Activity扩展外部类。这种做法不好吗?,java,android,asynchronous,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 AsynchtaskSubCl
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并重写抽象方法,并将其作为一个单独的类保留。他们这样做有什么不对吗?我看到的唯一问题是,如果我需要在一个活动中使用两个或多个异步任务。正如您已经指出的,您的活动中不能有多个异步任务。除此之外,您的类只能扩展另一个类,不能扩展更多。 因此,如果您想要一个扩展ListActivity并具有异步任务的活动,则必须创建另一个抽象异步listActivityAsynch类,以此类推。
另一件事是,您的代码对于其他程序员来说,仅仅通过查看某些活动是不容易理解的。他们首先必须了解Asynch并理解您使用的不寻常的设计。如果您是唯一一个使用此代码的人,那么它可能很好。但是,如果其他人必须使用它,最好遵循android的常见做法,即在内部类中生成。是的,正如您所指出的,如果您需要在一个活动中使用多个AsyncTask,则需要为每个AsyncTask分配一个id,以便在结果出来时处理。否则,我认为这种做法没有什么错,只是有点混乱。干杯最佳做法是什么?看起来我写android代码的方式很混乱,所以我试图找出一种更干净的方式。有没有清理异步任务的方法?据我所知,您最好使用线程,并通过其回调处理结果。AsyncTask在某些情况下我不确定,在作业完成后,线程仍然保留,直到系统调用gc,这可能会损害内存。当然,异步任务或线程都有其优点和缺点。选择适合你目的的东西。干杯我觉得你的方法很好很清楚。用户只需重写doInBackgroundAbstract和onPostExecuteAbstract方法并编写逻辑。无论如何,您已经提到了不能忽略的限制:。