使用 Context 启动另一个 Activity
要启动 Activity,您需要一个 Intent,例如:
Intent i = new Intent(context, class)
因此,要填写上下文参数,有几个选项可用:
- 使用
MyActivity.this
或仅 - 使用
this
使用getApplicationContext()
- 使用
getBaseContext()
我确信还有一两个选项。 这些选项都出现在某种教程中,一个使用第一个,下一个使用第三个选项。
那么我应该使用哪一个呢?这还重要吗?不同情况有不同的处理方式吗?
To start an Activity you need an Intent, like:
Intent i = new Intent(context, class)
So to fill in the context parameter, a couple of options are available:
- Use
MyActivity.this
or justthis
- Use
getApplicationContext()
- Use
getBaseContext()
And I'm sure there are one or two more options.
These options all appear in some sort of tutorial, one uses the first, the next uses the third option.
So which one should I use? Does it even matter? Is it different for different cases?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
是的,不同情况下它有所不同,
这取决于范围。假设您要在全局类中创建一个方法,该方法
扩展
Application
来创建一个在的每个类中使用的
您可以使用Toast
应用程序getApplicationContext()
来创建它。如果你想创建一个仅限于该特定 Activity 的视图,你可以使用 Activity.this
另外,如果你想在某个内部类(例如 AsyncTask)中创建一个 AlertDialog,那么您必须使用
Activity.this
,因为AlertDialog
要链接到Activity
本身。另外,不要使用
getBaseContext()
,只需使用您拥有的Context
即可。要获取更多信息,您可以参阅这个答案
。因此,真正问题的答案是使用
Activity.this
来启动一个新的Activity
。Yes its different for different cases,
It depends on the scope. Suppose if you are creating a method in a global class that
extends
Application
to create aToast
that is used in every class of yourApplication
you can usegetApplicationContext()
to create it.If you want to create a view that is restricted to that particular Activity you can use
Activity.this
Also if you want to create an AlertDialog in some inner class say
AsyncTask
, then you have to useActivity.this
, because theAlertDialog
is to be linked toActivity
itself.Also don't use
getBaseContext()
just use theContext
that you are having. For getting further information for the same you can seethis Answer
.So, the answer to the real question is better to use
Activity.this
to start a newActivity
.他们肯定是不同的。这些是不同的上下文,应该在尽可能小的范围(上下文)下使用。
例如,如果我们可以使用 Activity 的上下文而不是 ApplicationContext,则应该使用活动上下文,这同样适用于应用程序上下文和基础上下文。
They are different for sure. These are different contexts, and should be used with the least possible scope(context).
For example if we can use Activity's Context instead of ApplicationContext, one should use the activity context, same applies to application context, and base context.
你这样做....
You do it like this....