zoukankan      html  css  js  c++  java
  • Android 双击 Back 键退出程序

    双击退出程序的原理无非就是设置一个退出标识(询问是否退出),如果改变了这个标识(确认退出),则再次点击时立马退出,如果短时间内没有退出,则延时重置这个标识(不退出)。

    ====================Alarm 机制实现=========================

    AlarmActivity.java

    public class AlarmActivity extends Activity {
        private static boolean quit = false;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        /**
         * 重写 Back 键方法
         */
        public void onBackPressed() {
            if (quit == false) {
                Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
                alarmAtTime();                          //调用计时器
                quit = true;                            //设置退出标识
            } else {
                super.onBackPressed();
                quit = false;
                this.finish();            //退出当前Activity
            }
        }
    
        /**
         *  Alarm 机制计时器
         */
        private void alarmAtTime() {
            Intent intent = new Intent(this, AlarmReceiver.class);              //启动接收器
            PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 0);  //设置延迟启动
            AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
            long delay = System.currentTimeMillis() + 2000;         //取得当前时间,并延迟2秒
            manager.set(AlarmManager.RTC_WAKEUP, delay, pi);        //延迟启动广播接收器
        }
    
        /**
         *  BroadcastReceiver 广播接收器
         */
        public static class AlarmReceiver extends BroadcastReceiver {
            @Override
            public void onReceive(Context context, Intent intent) {
                quit = false;           //重置退出标识
            }
        }
    }
    AlarmActivity.java

    AndroidManifest.xml

        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".AlarmActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
            <receiver android:name=".Activity.AlarmActivity$AlarmReceiver"></receiver>
        </application>
    AndroidManifest.xml

    其实 Alarm 机制用于双击退出任务显得有些大材小用了,Java API 里提供的 Timer 类就能很好的完成这个任务。
    Alarm 机制适合那些长期在后台运行的定时任务,并且它具有唤醒CPU的功能,即可保证每次需要执行定时任务的时候都能正常工作。

    ====================Timer 机制实现============================

        private boolean quit = false;   //设置退出标识
    
        @Override
        public void onBackPressed() {
            if (quit == false) {        //询问退出程序
                Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
                new Timer(true).schedule(new TimerTask() {      //启动定时任务
                    @Override
                    public void run() {
                        quit = false;   //重置退出标识
                    }
                }, 2000);               //2秒后运行run()方法
                quit = true;
            } else {                    //确认退出程序
                super.onBackPressed();
                finish();
            }
        }
  • 相关阅读:
    【分布式】SpringCloud(2)--SpringCloud分布式架构思想的理解
    【分布式】SpringCloud(1)--基于RestTemplate构建简易微服务调用框架
    【问题管理】-- MyBatis实体类的属性名和数据库列名不一致解决方法汇总
    【开发工具】-- 一文全面解析 Postman 工具
    【数据库】Redis(4)--Redis进阶Redis配置与持久化
    【数据库】Redis(3)--Redis事务、Jedis、SpringBoot整合Redis
    分享的面试问题,java学习教程
    怎么保证缓存和数据库一致性
    详解一条 SQL 的执行过程
    json字符串{"1-3": 29},{"8-": 50},{"8-": 50},返回 1-3天 29,大于8天 100
  • 原文地址:https://www.cnblogs.com/woider/p/5451167.html
Copyright © 2011-2022 走看看