在以下示例中,如果我声明AsyncTask
,则android studio会给出警告,因此我应该将其静态定义。根据{{3}},我们将其定义为静态类,以使虚拟机可以垃圾收集服务。
但是看来线程不必是静态的。这是为什么?只是没有发出警告或线程行为完全不同的android studio吗?
public class MyTrackingService extends Service {
class TrackingThread extends Thread {
private final Context cotext;
TrackingThread(Context context){
this.cotext = context;
}
@Override
public void run() {
super.run();
}
}
class TrackingTask extends AsyncTask<Void, Void, Void> {
private final Context context;
TrackingTask(Context context){
this.context = context;
}
@Override
protected Void doInBackground(Void... voids) {
return null;
}
}
}
答案 0 :(得分:1)
在以下示例中,如果我声明了AsyncTask,那么android studio会给出警告,以便我将其定义为静态
棉绒警告过于激进。成为static
的需求主要来自活动和片段。
当然,像您在此处所做的那样,在AsyncTask
中包含Service
是没有意义的。您几乎从不希望在Service
中的主应用程序线程上执行任何操作,而AsyncTask
的意义是在任务完成时在主应用程序线程上执行某些操作。拥有AsyncTask
而没有onPostUpdate()
的情况是一种代码味道,它表明您应该使用其他内容,例如常规线程。
还请注意,尽管AsyncTask
并未被正式弃用,但在过去的几年中,人们一直不赞成使用它。
但是看来线程不必是静态的
它遭受与AsyncTask
相同的问题。只是没有棉绒警告。
只是Android Studio没有发出警告
正确。