如何在 Android 中正确退出 Processing sketch

How to correctly exit a Processing sketch in Android

我目前正在 Android Studio 中构建一个涉及处理草图的应用程序。

主要class:

import android.app.Activity;
import android.app.FragmentManager;
import android.os.Bundle;

import processing.android.PFragment;
import processing.core.PApplet;

public class ClassMain extends Activity {
    /**************************************************/
    PApplet sketch;
    /**************************************************/
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.class_main);

        FragmentManager fragmentManager = getFragmentManager();
        sketch = new ClassSketch();
        PFragment fragment = new PFragment();
        fragment.setSketch(sketch);
        fragmentManager.beginTransaction().replace(R.id.container, fragment).commit();
    }
    /**************************************************/
    @Override
    public void onBackPressed()
    {

        //ClassMain.this.finish();
    }
    /**************************************************/
    //It doesn't work if called from sketch...
    public void exits()
    {
        ClassMain.this.finish();
    }
    /**************************************************/
}

加工草图:

import android.view.KeyEvent;
import processing.core.PApplet;

public class ClassSketch extends PApplet {
    /*****************************************************************************/
    public void settings()
    {
        size(displayWidth, displayHeight);
    }
    /*****************************************************************************/
    public void setup()
    {
    }
    /*****************************************************************************/
    public void draw()
    {
        keykey();
    }
    public void keykey()
    {
        if(keyPressed)
        {
            if (key == CODED) {
                if (keyCode == KeyEvent.KEYCODE_BACK) {
                    //non of the following work:
                    //exit();
                    ClassMain j = new ClassMain();
                    j.exits();
                }
            }
        }
    }
}

这是问题所在,我希望用户根据我稍后将在草图中添加的某些情况,不仅退出草图,还退出托管它的 class(ClassMain). 每当(在草图中)我的草图中发生某些事情时,我希望能够退出整个 MainClass,但我恰好失败了。 感谢支持

这没有意义:

ClassMain j = new ClassMain();
j.exits();

此处您正在创建 ClassMain 的新实例,然后立即退出。那不会做任何事情。

相反,您需要告诉已经存在的父级 ClassMain 退出。

为此,您需要引用父 ClassMain 实例,您可以将其带入 ClassSketch 构造函数:

public class ClassSketch extends PApplet {

    private ClassMain parent;

    public ClassSketch(ClassMain parent){
       this.parent = parent;
    }

    public void keykey(){
       parent.exits();
    }
}

然后将实例传递给构造函数,您可以简单地使用this关键字:

protected void onCreate(Bundle savedInstanceState) {
        sketch = new ClassSketch(this);
}

作为对上述内容的补充说明,不要忘记在 onCreate() 函数中调用 super.onCreate(savedInstanceState);

您可以通过访问 finish() 直接退出草图:this.getActivity().finish();。请注意,在 API 级别 16 及以上,您还可以使用 this.getActivity().finishAffinity();,如 here 中所述。

最后,如果您按下 home 按钮,它会调用 onStop(),因此应用程序会留在内存中。如果您按下 back 按钮,那么 onDestroy() 也会被调用。如果您按说明调用 finish(),则肯定会调用 onDestroy()

我的两分钱...

Kf