1. 程式人生 > >【GT-安卓應用開發之退出APP】

【GT-安卓應用開發之退出APP】

前言:目前在app中主流的退出應用的方式有兩種,一種是彈出提示框,另外一種則是主流的雙擊退出。今天整理了一下相關程式碼,編寫一個小demo整理了幾種退出方式。

  在安卓中,監聽返回鍵有兩種方式,分別是onKeyDown與onBackPress,我定義四種實現方式如下:

  方法一,onBackPress處理,雙擊退出

  方法二,onKeyDown雙擊退出

  方法三,onBackPress並呼叫系統提示框

  方法四,onKeyDown呼叫自定義彈出框

 主介面MainActivity程式碼如下:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
    }

    @OnClick({R.id.btn1,R.id.btn2, R.id.btn3, R.id.btn4})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.btn1:
                startActivity(1);
                break;
            case R.id.btn2:
                startActivity(2);
                break;
            case R.id.btn3:
                startActivity(3);
                break;
            case R.id.btn4:
                startActivity(4);
                break;
        }
    }

    private void startActivity(int i) {
        switch (i){
            case 1:
                Intent intent1 = new Intent(MainActivity.this,ExitActivity1.class);
                intent1.putExtra("text","方法一");
                startActivity(intent1);
                finish();
                break;
            case  2:
                Intent intent2 = new Intent(MainActivity.this,ExitActivity2.class);
                intent2.putExtra("text","方法二");
                startActivity(intent2);
                finish();
                break;
            case 3:
                Intent intent3 = new Intent(MainActivity.this,ExitActivity3.class);
                intent3.putExtra("text","方法三");
                startActivity(intent3);
                finish();
                break;
            case 4:
                Intent intent4 = new Intent(MainActivity.this,ExitActivity4.class);
                intent4.putExtra("text","方法四");
                startActivity(intent4);
                finish();
                break;
        }
    }

}

  四種退出方式的實現邏輯程式碼:

  方法一

@Override
public void onBackPressed() {
    long secondTime = System.currentTimeMillis();
    if (secondTime - firstTime > 6200) {
        Toast.makeText(this, "再按一次退出程式", Toast.LENGTH_SHORT).show();
        firstTime = secondTime;
    } else {
        System.exit(0);
    }
}

  方法二

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
        long secondTime = System.currentTimeMillis();
        if (secondTime - firstTime > 6200) {
            Toast.makeText(this, "再按一次退出程式", Toast.LENGTH_SHORT).show();
            firstTime = secondTime;
            return true;
        } else {
            System.exit(0);
        }
    }
    return super.onKeyDown(keyCode, event);
}

  方法三

@Override
public void onBackPressed() {
    AlertDialog.Builder builder = null;
    builder = new AlertDialog.Builder(this);
    builder.setTitle("提示");
    builder.setMessage("確定退出應用?");
    builder.setCancelable(true); // 將對話方塊設定為可取消
    // 給按鈕添加註冊監聽
    builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            // 點選按鈕所呼叫的方法
            System.exit(0);
        }
    });
    builder.setNegativeButton("取消",new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            // 點選按鈕所呼叫的方法

        }
    });
    builder.show();
}

  方法四

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
        String msg = "是否確定退出應用\n否則取消";
        new NotificationDialog(this,null, msg, null,new NotificationDialog.DialogCallBack() {

            @Override
            public void onResult(boolean confirmed, Bundle bundle) {
                if(confirmed){
                    System.exit(0);
                }else{
                }
            }
        }, true).show();
    }
    return super.onKeyDown(keyCode, event);
}

PS:除了今天的主角退出APP外,程式碼中還涉及到了Activity之間利用Intent進行傳值,傳輸與接送程式碼如下:

intent1.putExtra("text","方法一");
String text = getIntent().getStringExtra("text");
tv.setText(text);

  最後,專案地址