为什么内部AsyncTask需要为静态但Thread不需要为静态?

时间:2018-10-21 10:05:11

标签: android android-asynctask

在以下示例中,如果我声明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;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

  

在以下示例中,如果我声明了AsyncTask,那么android studio会给出警告,以便我将其定义为静态

棉绒警告过于激进。成为static的需求主要来自活动和片段。

当然,像您在此处所做的那样,在AsyncTask中包含Service是没有意义的。您几乎从不希望在Service中的主应用程序线程上执行任何操作,而AsyncTask的意义是在任务完成时在主应用程序线程上执行某些操作。拥有AsyncTask而没有onPostUpdate()的情况是一种代码味道,它表明您应该使用其他内容,例如常规线程。

还请注意,尽管AsyncTask并未被正式弃用,但在过去的几年中,人们一直不赞成使用它。

  

但是看来线程不必是静态的

它遭受与AsyncTask相同的问题。只是没有棉绒警告。

  

只是Android Studio没有发出警告

正确。