Android中的getIntent()和新Intent()有什么区别?

Aja*_*tha 1 java android android-studio

我喜欢这个

第一种方式

Intent intent = new Intent();
intent.putExtra("isLoggedIn",true);
setResult(RESULT_OK,intent);
Run Code Online (Sandbox Code Playgroud)

第二种方式

Intent intent = getIntent();
intent.putExtra("isLoggedIn",true);
setResult(RESULT_OK,intent);
Run Code Online (Sandbox Code Playgroud)

两者都可以给出相同的结果.我想知道这两者之间的实际差异

tam*_*jak 7

在一个上下文中Activity,getIntent()将返回Intent最初发送给的Activity.您给出的示例可能会起作用,但getIntent()如果您将其传递Intent给另一个Activity或作为结果将其发回,则应该真的避免使用.

例如:

如果我开始一项活动:

Intent intent = new Intent(context, MainActivity.class);
intent.putExtra("key", "test");
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

然后在我的MainActivity类中:

Intent intent = getIntent();
String value = intent.getString("key"); // value will = "test".
Run Code Online (Sandbox Code Playgroud)

所以现在考虑一下你是否有SecondActivity,我是使用getInent()从MainActivity开始的;

Intent intent = getIntent();
intent.setClassName("com.example.pkg", "com.example.pkg.SecondActivity"");
intent.setComponent(new ComponentName("com.example.pkg", "com.example.pkg.SecondActivity"));
intent.putExtra("isLoggedIn",true);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

然后在我的SecondActivity中,我可以访问key和isLoggedIn.

Intent intent = getIntent();
String value = intent.getString("key"); // value will = "test".
boolean testIsLoggedIn = intent.getBooleanExtra("isLoggedIn",true);
Run Code Online (Sandbox Code Playgroud)

因此,通常使用getIntent开始进一步的活动并不是一个好习惯.