2011-07-12 39 views
2

我一直在想如何正确地做到这一点。获取应用程序上下文以显示图形组件

我想显示一个对话框或吐司(或任何图形)从另一个地方比我的主线程。

但为此我需要传递一个上下文。

bruteforce的方式是沿着所有的时间传递上下文,或者创建一个静态变量来存储上下文。

这些工作,但都没有去所以有人告诉我正确的方法来完成这个方式:

ProgressDialog.show([...], "",[...].getResources().getString(R.string.logoutProgressMessage), true); 
+0

为什么你担心通过上下文这个解决方案的代码的例子吗? – Idistic

+0

当我处理触摸事件时,我想显示的东西,但我不在正确的线程 –

回答

2

你要寻找的是runOnUiThread。这应该使事情变得更容易。 :)

对于主线程中的其他类,请尝试getApplicationContext。我从其他课程和服务中使用Toast。例如:

上下文context = getApplicationContext();
Toast toast = Toast.makeText(context,“Your timer has expired”,Toast.LENGTH_LONG);
toast.show();

+1

这将工作,只要你有权访问活动,即你已经通过活动,或运行在一个对象有权访问封闭的活动 – jqpubliq

+0

我发现上面的Toast代码可以从服务中正常工作,如果尝试打开一个对话框,它确实会失败。不过,我不会惊讶地发现我错过了一个关键概念。 :) – Chris

1

在主线程中制作一个Handler并让后台线程使用它发布到您的UI线程可能是最合适的解决方案。

真正尝试静态参考存到自己Context因为这是一个很大的leak

+0

保持对“Context”的静态引用不一定是内存泄漏。如果它是应用程序的'Context',这不是泄漏,并且如果它是一个活动的'Context',则只要Activity被销毁,您就必须小心并将其删除。 –

0

您可以使用一个静态字段来存储应用程序的Context(该方法getApplicationContext()获得),这不会引起内存泄漏。

你可以找到实现在this question

相关问题