Я делаю много чтения об этом в настоящее время, но думал, что никогда не помешает спросить у хорошо осведомленной группы разработчиков. Это популярная проблема, и, похоже, существует много разных способов ее обработки.Android Activity Memory
У меня есть приложение для Android. Он использует OpenGL, поэтому, когда он запускается, происходит значительное количество загрузки данных как с диска, так и с VRAM. Когда экран вращается, а также когда нажата кнопка питания (чтобы перевести телефон в спящий режим), я теряю все данные, и активность убивается.
Я не хочу этого. Приложение занимает около 7 секунд, чтобы загружать и загружать свои данные, и это действительно раздражает, если вы просто спите свой телефон на секунду, а затем должны ждать, пока приложение снова загрузит все.
Я знаком с жизненным циклом приложения, описанным Google, но с трудом реализуя решение, которое работает для моего конкретного случая.
Любые предложения? Моя общая цель - сохранить следующее в памяти при смене телефона: 1. Память приложения на куче 2. Память приложения в VRAM
Спасибо!
До сих пор:
public class MainActivity
private FH_SurfaceView fGLSurfaceView;
@Override
public void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
}
@Override
public void onRestoreInstanceState(Bundle savedState)
{
super.onRestoreInstanceState(savedState);
}
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// Check if the system supports OpenGL ES 2.0.
final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
final ConfigurationInfo configurationInfo = activityManager.getDeviceConfigurationInfo();
final boolean supportsEs2 = configurationInfo.reqGlEsVersion >= 0x20000;
if (savedInstanceState != null) {
/* NEED TO DO SOMETHING HERE?? */
return;
}
else{
this.fGLSurfaceView = new FH_SurfaceView(this);
setContentView(fGLSurfaceView);
}
}
@Override
protected void onResume()
{
super.onResume();
}
@Override
protected void onPause()
{
super.onPause();
}
}
Это поможет, если вы разместите код своего действия, чтобы сделать вопрос более конкретным. – EJK
Отложите загрузку данных в другой поток. Вероятно, он убит из-за ANR, потому что он блокирует основной поток вашего приложения, который выполняет загрузку/обработку данных. –
@Larry: что такое ANR? Мне нужно только один раз загрузить данные, и все это содержится в моем классе класса поверхности и его подклассах. Я просто не хочу, чтобы все массивы и т. Д. Вытерли, когда приложение приостановлено ... – Fra