private static Helper.GetRadar mTask;
private void setRadar(String area, String distance, String radar) {
**/// LINT WARNING ON THE BELOW LINE**
mTask = new Helper.GetRadar(activity, area, distance, radar) {
@Override
protected void onPostExecute(String result) {
gotRadar(result);
}
};
}
class Helper {
....
public static class GetRadar extends AsyncTask<String, Void, String> {
private WeakReference<Context> mContext;
GetRadar(Context context, String area, String distance, String radar) {
mContext = new WeakReference<Context>(context);
}
@Override
protected String doInBackground(String... arg) {
....
return result;
}
@Override
protected void onPostExecute(String result) {
/// Override
}
}
}
您正在用匿名内部类扩展静态类,该类将保存对调用活动的引用,这就是为什么您会得到警告。您可以创建自己的自定义接口来调用onpostexecute
,如下所示:
public static class GetRadar extends AsyncTask<String, Void, String> {
private WeakReference<Context> mContext;
private MyPostExecute mRunner;
interface MyPostExecute {
void run(String result);
}
GetRadar(Context context, String area, String distance, String radar, MyPostExecute runner) {
mContext = new WeakReference<Context>(context);
mRunner = runner;
}
@Override
protected String doInBackground(String... arg) {
....
return result;
}
@Override
protected void onPostExecute(String result) {
mRunner.run(result);
}
}
希望使用AsyncTask的每个类都可以定义自己的PostExecute实现,如下所示:
private static MyRunner implements GetRadar.MyPostExecute {
private WeakReference<Helper> mHelper;
MyRunner(Helper h) {
mHelper = new WeakReference<>(h);
}
@Override
void run(String result)
{
Helper h = mHelper.get();
if( h != null && !h.isFinishing() ) {
h.gotRadar(result);
}
}
}
那么对于本例,您可以使用以下命令调用它:
mTask = new Helper.GetRadar(activity, area, distance, radar, new MyRunner(this));
这是我的代码: 我怎么纠正这个?
问题内容: 有些问题的标题相似,但所有问题都与您在构造函数中获得的上下文有关。 有带有项目的RecyclerView和其他带有播放\暂停按钮的视图。 此类允许该视图一次仅播放一个文件。如果正在播放view_1,然后在view_2上按播放,则将播放file_2。 此类中有一个 ImageButton mPlayPauseButton。需要将view_1的 ImageButton 设置为paused_
我有以下java代码: 我的问题如下:我收到一个文本和一种语言,我必须检查该文本是否仅使用该语言的有效字母字符书写。我的代码如下: 这很好,也很有效,但随着我在应用程序中添加语言,我将不得不在交换机中添加越来越多的案例。 我想知道在中是否有一种方法可以动态命名一个静态嵌套类,比如: 所以我上面的代码可能是这样的: 谢谢,如果这是超级简单的事情,我很抱歉。 我是一名开发人员,正在学习。
本文向大家介绍Android 避免使用AsyncTask泄漏活动,包括了Android 避免使用AsyncTask泄漏活动的使用技巧和注意事项,需要的朋友参考一下 示例 注意:AsyncTask除了这里描述的内存泄漏之外,还有很多陷阱。因此,请谨慎使用此API,如果您不完全了解其含义,请完全避免使用它。有很多选择(线程,EventBus,RxAndroid等)。 一个常见的错误AsyncTask是
我的项目中有一个AsyncTask,有一个警告,它说:
我正在调试一个我在Tomcat应用程序中多年来遇到的问题——由于Webapp类加载器无法通过气相色谱重新启动应用程序时导致的内存泄漏。我用JProfiler对堆进行了快照,似乎至少我的一些静态变量没有被释放。 某些类有一个静态 final 成员,该成员在首次加载类时初始化,并且因为它是 final,所以我无法在应用程序关闭时将其设置为 null。 静态最终变量是Tomcat中的反模式,还是我错过了