如何在 Android Studio 中以除 onCreate 之外的其他方法获取应用程序的上下文?
Posted
技术标签:
【中文标题】如何在 Android Studio 中以除 onCreate 之外的其他方法获取应用程序的上下文?【英文标题】:How to get application's context in other method than onCreate in Android Studio? 【发布时间】:2015-08-08 06:50:15 【问题描述】:我有一个异步任务,它最终会创建参数 email,about。异步任务在 onCreate 方法中,这个 CustomListAdapter 也是。我想将 onPostExecute
中的 asyncTask 中的 onCreate 中的 CustomListAdapter 移动。我的问题是 this
表示应用程序的上下文。当我将它移动到onPostExecute
时,它不再获得该上下文。我试图用 getApplicationContext()
, activityName.this.getApplicationContext
替换它,但它不起作用,因为它需要应用程序的上下文。我找到了这个Static way to get 'Context' on android?,但由于某种原因我无法在清单中定义名称。我可以在 asyncTask 的 onPostExecute 方法中使用什么其他方法来获取应用程序的上下文?或者我应该只用上下文作为参数来做一个 Asynck 任务?
CustomListAdapter adapter=new CustomListAdapter(this, email,about);
list=(ListView)findViewById(R.id.list);
list.setAdapter(adapter);
list.setOnItemClickListener(new AdapterView.OnItemClickListener()
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id)
// TODO Auto-generated method stub
String Slecteditem= email.get(position);
Toast.makeText(getApplicationContext(), Slecteditem, Toast.LENGTH_SHORT).show();
);
【问题讨论】:
【参考方案1】:如果你的活动名称是 MyActivity,你总是可以只使用 MyActivity.this 来获取它的上下文
【讨论】:
解决了。我只试过MyActivity.this.getApplicationContext
。似乎只有 MyActivity.this 获得了上下文。谢谢。【参考方案2】:
您可以在CustomAysncTask
的构造函数中传递Activity
组件的上下文,如下面的代码sn-p 并使用它。但始终正确检查null
MyActivity activity
public CustomAsycTask(MyActivity activity)
this.activity=activity;
更新:正如Tomer Shemesh
指出的那样
private WeakReference<MyActivity> activity = null;
public CustomAsycTask(MyActivity activity)
activity= new WeakReference<MyActivity>(activity);
以及访问它:
final MyActivity iActivity = activity.get();
【讨论】:
将活动的引用传递给异步任务是非常糟糕的做法,因为如果您的任务在活动完成后运行,您将崩溃或出现内存泄漏。 而MainActivity.this
里面的AsyncTask
不会?
它不会造成内存泄漏,只要你做一个空检查就可以了
我猜两者都会造成内存问题,正如我所说的那样,空检查将在那里
嗯。我的印象是调用 Activity.this 不会导致内存问题,因为它不会阻止 Activity 被销毁,但保持对 Activity 的活动引用将停止对 Activity 进行垃圾收集。以上是关于如何在 Android Studio 中以除 onCreate 之外的其他方法获取应用程序的上下文?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android Studio 中以编程方式上传和下载 Google Drive 上的任何文件
在 Android Studio 中以编程方式从应用程序触发系统的暗模式
从 Android Studio 中的 SQLite 数据库中以字符串形式检索数据
如何在 SQL Server Management Studio 中以“真实”CSV 格式获取导出输出?