Почему onNewIntent вызывается дважды из SearchActivity?

#android

#Android

Вопрос:

Я использую SearchView для обработки поиска в приложении. Всякий раз, когда поиск выполняется из SearchActivity, метод onNewIntent вызывается дважды. Хотя, если поиск выполняется из других действий, onNewIntent будет вызван только один раз.

Почему onNewIntent вызывается дважды из SearchActivity?

Вот соответствующий код и конфигурация из приложения.

Манифест

     <activity
        android:name=".MainActivity"
        android:theme="@style/AppTheme.NoActionBar.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

        <meta-data
            android:name="android.app.default_searchable"
            android:value=".SearchResultsActivity" />
    </activity>
    <activity
        android:name=".SearchActivity"
        android:launchMode="singleTop"
        android:parentActivityName=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>

        <meta-data
            android:name="android.app.searchable"
            android:resource="@xml/searchable" />
    </activity>
    <activity
        android:name=".ui.browse.BrowseActivity"
        android:parentActivityName=".MainActivity" />
  

onCreateOptionsMenu всех действий

 public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.options_menu, menu);

    // Associate searchable configuration with the SearchView
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
    searchView.setSearchableInfo(searchManager.getSearchableInfo(new ComponentName(this, SearchActivity.class)));
    searchView.setQueryHint(getResources().getString(R.string.search_hint));

    return super.onCreateOptionsMenu(menu);
}
  

SearchActivity

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_search_results);
    Toolbar toolBar = findViewById(R.id.searchActivityToolBar);
    setSupportActionBar(toolBar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    handleSearch(intent); // perform search
}
  

Ответ №1:

Похоже, в эмуляторах Android есть ошибка, которая вызывает дополнительный onNewIntent для функций поиска, реализованных с помощью SearchView.

Такое поведение не встречается на реальных устройствах.