Android: передача объекта из актива для просмотра - PullRequest
0 голосов
/ 24 июля 2011

Данные о загрузке моей активности из res.raw

Чтобы предоставить эти данные представлению, я добавил параметр к представителю представления

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    System.loadLibrary("engine-2d");

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
            WindowManager.LayoutParams.FLAG_FULLSCREEN );

    if (_engine == null)
    {
        Display display = getWindowManager().getDefaultDisplay(); 
        int width = display.getWidth();
        int height = display.getHeight();       

        byte[] scene;
        int scene_size = 0;
        try {
            InputStream ins = getResources().openRawResource(R.raw.package_test);
            scene_size = ins.available(); 
            scene = new byte[scene_size]; 
            ins.read(scene); 
            ins.close(); 
        } catch (IOException e) {
            // Should never happen!
            throw new RuntimeException(e);
        }

        _engine = new PlsEngine2D(scene, scene_size, width, height);
    }

    setContentView(new PlsSurface2D(this, _engine));
}


@Override
public void onDestroy() {
    super.onDestroy();
    _engine.DestroyEngine();
}

Я не знаю почему, но когда я нажимаю кнопку «Домой» (экземпляр моей программы все еще находится в памяти) и затем я снова запускаю приложение, оно вылетает.

Фактически, PlsEngine2D использует ndk для вызова функции C, которая делает malloc.

Я точно не знаю, в чем проблема, но мне интересно, правильны ли указатели malloc!

Или, может быть, это мое мнение! Я даю ему объект _engine. Интересно, когда вид проснется, у него снова будет объект _engine param!

Есть ли другой способ передать мой объект _engine в представление? Может ли представление принять значение _engine для действия?

Ответы [ 2 ]

1 голос
/ 24 июля 2011

Не могли бы вы опубликовать код в вашем вопросе, пожалуйста? Я не уверен, что получаю всю картину.

В любом случае, когда вы запускаете действие, которое все еще находится в памяти, следующие методы действия вызываются в следующем порядке: onRestart (), onStart () и onResume ().

Проверьте эту ссылку для подробностей

0 голосов
/ 24 июля 2011

onResume() вызывается, когда активность все еще находится в памяти.Он не создается снова, так как в onResume() вы больше не вызываете setContentView().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...