我想知道我应该将AsyncTask
放在我的android项目中。截至目前,我正在实施一个AsyncTask
作为我的活动的私人课程。我要做的是在每个有网络呼叫的活动中,我将实现自己的私有类AsyncTask
。我有几个问题
在
preexecute
方法中,它表示我可以与活动进行交互并放置微调器或进度条。我是通过使用My_Activity_Class_Name.this
来完成的。所以我的问题是这行代码是否引用了调用AsyncTask
的活动?如果是这样,我相信这将是一个静态的方法。我如何实际传入类的实例,以便我可以与非静态函数进行交互?- 醇>
我想将所有异步代码放入一个类中以满足其各自的需求。我的问题是,如果我需要将类型返回到调用异步方法的类,我该如何返回值?这也是最佳做法吗?
答案 0 :(得分:1)
你应该使你的内部私有AsyncTask类 - 静态。这是因为否则它将隐含引用您的Activity - 这意味着如果您的Activity将被重新创建 - 即。由于配置更改 - 然后您的AsyncTask仍将保留您的活动引用导致引用泄漏。这意味着您应该将对您的活动的引用传递给AsyncTask in ie。 AsyncTask的构造函数,并将其保存在WeakReference(WeakReference/AsyncTask pattern in android)中。
所以我的问题是这行代码是否引用了调用ASYNC任务的活动?
是的,但前提是您的AsyncTask类是非静态的
如果是这样我认为这将是一种静态的方法。我如何实际传入类的实例,以便我可以与非静态函数进行交互?
它不是静态方法,使用My_Activity_Class_Name。这可以访问Activity类的非静态方法。
我的问题是,如果我需要将类型返回到调用Async方法的类,我该如何返回值?这也是最好的做法吗?
您可以在Activity类上调用一个方法,这没有任何问题。请记住,您无法从非UI线程访问UI小部件。因此,从UI线程上调用的onPostExecute更新Activity小部件。