【问题标题】:Why is the onNewIntent(Intent intent) method getting called twice?为什么 onNewIntent(Intent intent) 方法会被调用两次?
【发布时间】:2012-12-20 16:01:12
【问题描述】:

我用两个参数开始一个新活动。

Intent intent = new Intent(WebTestActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);                  
Uri uri =  Uri.parse(url);
intent.setData(uri);
startActivity(intent);

并在onNewIntent 方法中捕获uri

@Override
public void onNewIntent(Intent intent) {  //calls twice
    super.onNewIntent(intent);      
    Uri uri = intent.getData();
    new AsynkTask().execute(uri);
}

onNewIntent 方法被调用了两次,原因不明,似乎不正确。

【问题讨论】:

  • 什么是 AsynkTask().start ?
  • 你想要的只是意图..?解析意图..
  • Igor,你能告诉我你在什么设备上发现了这个问题吗?我只能在 Genymotion 模拟器上重现它,但不能在任何其他设备上重现它(S3、S4、运行 4.0.4 的 Galaxy Nexus、运行 4.3 的 Nexus 7)
  • 这个问题还有效吗?
  • 它与从自身内部调用 onNewIntent 方法有什么关系吗?

标签: java android


【解决方案1】:
Intent intent = new Intent(WebTestActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);                  
intent.putExtra("url",url);
startActivity(intent)

在主活动中;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Bundle extras = getIntent().getExtras();
    String url = extras.getString(url);

}

然后,您可以解析 url 并用作 Uri。这样,方法就不会被调用两次了。

【讨论】:

    【解决方案2】:

    onNewIntent(意图意图) 如果 Activity 在其包中将 launchMode 设置为“singleTop”,或者客户端在调用 startActivity(Intent) 时使用了 FLAG_ACTIVITY_SINGLE_TOP 标志,则会调用此方法。

    如果被调用了两次,肯定是被无意调用了:启动activity两次?还是手动调用方法?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-08
      • 1970-01-01
      • 2012-10-19
      相关资源
      最近更新 更多