onKeyDownを合理的に使用してプログラムを最適化

2270 ワード

前言:
Android開発者はonKeyDownという方法に慣れていないはずです.これはActivityでユーザーが物理ボタンを操作しているのを傍受しているときにコールバックを行います.私たちはこのコールバック動作に基づいて必要な処理をすることができます.下で、プログラムで実際にonKeyDownイベントをどのように処理しているかを教えてあげます.
1、起動ページ
画面を開くページには一般的に普及図や歓迎ページなどを置いて、遅延をします.このとき、ユーザーが突然戻るキーを押したら、このActivityは直接破棄されます.つまり、プログラムがkillされたことを意味します.しかし、ユーザーにとって彼は戻る操作をしただけだと思っています.そして、ユーザーはまたあなたのプログラムを開けて、再起動していることに気づきました.emmm、体験は極めて不快です.しかし、大丈夫です.処理をすればいいです.スクリーンを開くページのActivityでユーザーの戻りキーを遮断すればいいです.具体的には、次のようにします.
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

多くのアプリの画面を見てもこの処理をしていない学生もいるかもしれませんが、もちろん、これは処理しなければならないのではなく、プロジェクトの実際のニーズに応じて取捨選択しなければなりません.
2、ログイン画面
ログインインタフェースの时に私达は普通のページのインタラクティブなロジックに従って、この时に戻るキーを押して普通は直接プログラムを脱退して、あなたがログインインタフェースを脱退してログインインタフェースに戻るのに関わらず、スクリーンを开けてからログインインタフェースに着くのに関わらず、正常な情况の下で私达はfinishがその他のActivityを落とすので、これは私が処理する必要があると思って、ただ冷たいスタートアップの时にスタートページを表示するだけで、すなわち、戻りキーをクリックすることはHOMEキーをクリックすることと効果が一致し、具体的には以下の通りである.
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            Intent intent = new Intent(Intent.ACTION_MAIN);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.addCategory(Intent.CATEGORY_HOME);
            startActivity(intent);
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

3、ホームページ
プログラムがホームページの面にあるとき、これ以上何も処理しない場合、戻るキーを押すのは一般的な論理で直接プログラムを終了するに違いありません.私たちがよく見られるアプリの処理方法の多くは、規定時間内に2回終了するか、戻るキーを押してDialogに終了するかどうかを尋ねます.
    private long exitTime;
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            if (System.currentTimeMillis() - exitTime > 2000) {
                Toast.makeText(MainActivity.this, "        ", Toast.LENGTH_SHORT).show();
                exitTime = System.currentTimeMillis();
            } else {
                MainActivity.this.finish();
            }
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }