将信息传递给android中的异步方法的最佳方法是什么?

时间:2017-01-28 11:46:25

标签: java android asynchronous

我正在Android Studio中开发Android应用程序,我怀疑下面哪种方法更好地将信息传递给异步方法,例如HTTP请求。我以警报对话框为例:

第一种方法:将参数声明为final:

final String par1 = "Test";

DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            switch (which){
                case DialogInterface.BUTTON_POSITIVE:
                    //Yes button clicked
                    doSomething(par1);
                    break;

                case DialogInterface.BUTTON_NEGATIVE:
                    //No button clicked
                    break;
            }
        }
    };

    AlertDialog.Builder builder = new AlertDialog.Builder(
        MainActivity.getCurrentInstance().getApplicationContext()
    );
    builder.setMessage("confirm the operation?")
            .setPositiveButton("Yes", dialogClickListener)
            .setNegativeButton("No", dialogClickListener).show();

第二种方法:传递给监听器构造函数:

MyOnClickListener dialogClickListener = new MyOnClickListener("test") {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            switch (which){
                case DialogInterface.BUTTON_POSITIVE:
                    //Yes button clicked
                    doSomething(this.getParameterValue());
                    break;

                case DialogInterface.BUTTON_NEGATIVE:
                    //No button clicked
                    break;
            }
        }
    };

    AlertDialog.Builder builder = new AlertDialog.Builder(
        MainActivity.getCurrentInstance().getApplicationContext()
    );
    builder.setMessage("confirm the operation?")
            .setPositiveButton("Yes", dialogClickListener)
            .setNegativeButton("No", dialogClickListener).show();

我对第一种方法有一定的担心,因为它是一种全局变量。

1 个答案:

答案 0 :(得分:1)

你的第一种方法很好。这不是一个全局变量,这是一个在闭包中捕获的局部变量。从技术上讲,这种方式或多或少与将变量传入侦听器的构造函数,将其存储在那里然后在方法中使用的方式相同。不同之处在于编译器会为您完成所有这些操作,您可以编写更少的代码。