0

Я работаю над очень простым приложением, которое содержит два действия - MainActivity (parent) и detailActivity (child). Родительское и дочернее отношение задано в файле манифеста.Лучшая практика для загрузки данных и сохранения их постоянной

Mainactivity имеет recyclerView и для каждого элемента, щелкнув на экране ресайклера, он открывает детальную активность.

Все работает до сих пор, за исключением того, что мое приложение работает медленно.

У меня есть метод processJson в методе onCreate MainActivity, который загружает данные из статического json-файла. Этот файл довольно большой (> 700 строк)

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_char); 

    processJson(); 
    ....... 
} 

Переключение с MainActivity на DetailActivity

Intent intent = new Intent(this, CharDetailActivity.class); 
intent.putExtra("charId", charId); 
cxt.startActivity(intent); 

Переключение с DetailActivity к MainActivity только через BackButton или через ActionBar задней кнопки.

AndroidManifest.xml

<activity 
     android:name=".CharDetailActivity" 
     android:label="@string/title_activity_char_detail" > 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value=".CharActivity" /> 
    </activity> 

Если удалить мета-теги приложение вызывает MainActivity-х OnCreate только один раз!

Каждый раз, когда приложение переключается с DetailActivity на MainActivity, оно вызывает onCreate и перезагружает данные. Есть ли лучший способ загрузки данных в приложение? или сохранить instace из MainActivity?

+0

Опубликуйте код, в котором вы переключитесь с 'DetailActivity' на' MainActivity' и наоборот. – Simas

+0

обновленный вопрос с кодом. Спасибо – Jayaram

+0

'onCreate()' не следует вызывать, если вы не уничтожаете 'MainActivity' при переключении на другой. Интересно, вы в любое время называете 'finish()' или возвращаете основное действие, вызывая 'startActivity'? – Simas

ответ

2

Давид говорит:

UP навигация запускает родительскую активность с Intent.FLAG_ACTIVITY_CLEAR_TOP. Стандартное поведение этого флага заключается в том, чтобы завершить все действия, которые находятся поверх родительского действия в стеке задач, включая сам родительский актив, а затем запустить новый экземпляр родительской активности **. Если вы хотите, чтобы возобновить существующий экземпляр родительской активности, то вы можете установить следующее в манифесте для родительской деятельности:

android:launchMode="singleTop" 

Когда CLEAR_TOP и SINGLE_TOP используются вместе, это будет Возобновить существующий экземпляр родительской активности. В этом случае onCreate() не будет вызываться в возобновленной родительской активности, но вместо этого вместо него будет вызываться onNewIntent().

check his answer here

2

Я предлагаю смотреть на режимах запуска деятельности (http://inthecheesefactory.com/blog/understand-android-activity-launchmode/en). Вы можете использовать их для управления независимо от того, будет ли ваш основной вид активности называть onCreate(Bundle savedInstanceState) каждый раз, когда он будет перемещен из подробного действия.

Вы хотите установить режим запуска основной деятельности либо singleTop, либо singleTask в зависимости от вашего варианта использования.

 Смежные вопросы

  • Нет связанных вопросов^_^