如何从静态ASyncTask获取当前显示的活动?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从静态ASyncTask获取当前显示的活动?相关的知识,希望对你有一定的参考价值。
我目前正在通过一个快速的ASyncTask通过快餐栏消息报告其结果。
这是ASynctask的顶部:
private static class PushSettingsToDevice extends AsyncTask<URL, Void, Boolean> {
private View rootView;
private PushSettingsToDevice(View rootView){this.rootView = rootView;}
这是结束:
@Override
protected void onPostExecute(Boolean result) {
try{
Log.d(TAG, "pushSettings Finished.");
Snackbar.make(rootView, MyApplication.getContext().getResources().getString(R.string.app_schedule_menu_settings_applied), Snackbar.LENGTH_LONG).show();
} catch(Exception e){
e.printStackTrace();
}
要显示snackBar,我需要一个View(我的例子中的rootView)的引用,但是通过这样做,我从静态类引用一个视图,并创建一个内存泄漏。
如何在用户当前看到的任何视图上显示snackBar?换句话说,如何从我的静态ASyncTask中检索当前显示给用户的Activity,然后在此Activity中查看一个视图?
答案
解决方案由jackz314提供
这是新代码:
private static class PushSettingsToDevice extends AsyncTask<URL, Void, Boolean> {
private WeakReference<View> rootView;
private PushSettingsToDevice(View rootView, boolean debug_mode){this.rootView = new WeakReference<>(rootView);}
最后:
@Override
protected void onPostExecute(Boolean result) {
try{
Log.d(TAG, "pushSettings Finished.");
if(rootView != null){
Snackbar.make(rootView.get(), MyApplication.getContext().getResources().getString(R.string.app_schedule_menu_settings_applied), Snackbar.LENGTH_LONG).show();
}
} catch(Exception e){
e.printStackTrace();
}
以上是关于如何从静态ASyncTask获取当前显示的活动?的主要内容,如果未能解决你的问题,请参考以下文章
由于 AsyncTask 是一个单独的类,如何将 OnPostExecute() 的结果获取到主要活动?
JSONArray 到 ListView - AsyncTask
如何从 Android AsyncTask 更改活动 UI?