Android快速退出APP的几种方式

这篇具有很好参考价值的文章主要介绍了Android快速退出APP的几种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

方式一

将主活动设置为SingleTask模式,可以确保每次启动主活动时,都是同一个实例,提高了内存利用率。在退出的活动中,可以通过Intent将返回主活动,并且重写主活动的onNewIntent方法,在其中加入一句finish()结束。

  1. 在AndroidManifest.xml文件中将主活动设置为SingleTask模式:
<activity android:name=".MainActivity"
          android:launchMode="singleTask">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
  1. 在退出的活动中,通过Intent返回到主活动:
public class ExitActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_exit);

        Button btnExit = findViewById(R.id.btn_exit);
        btnExit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(ExitActivity.this, MainActivity.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);
            }
        });
    }
}
  1. 在MainActivity中重写onNewIntent方法,在其中加入一句finish():
public class MainActivity extends AppCompatActivity {

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

        MyApplication.getInstance().addActivity(this);
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        finish();
    }
}

这样,每次返回到主活动时,都会关闭上一个实例,确保内存利用率。

方式二

通过广播来完成退出功能,接受广播后退出
可以通过发送一个自定义的广播来实现退出应用程序的功能。具体实现步骤如下:

  1. 在MyApplication中添加发送广播的方法:
public void sendExitBroadcast() {
    Intent intent = new Intent("com.example.exit");
    sendBroadcast(intent);
}
  1. 在需要退出应用程序的地方调用MyApplication.getInstance().sendExitBroadcast()方法,发送广播:
public class ExitActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_exit);

        Button btnExit = findViewById(R.id.btn_exit);
        btnExit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MyApplication.getInstance().sendExitBroadcast();
            }
        });
    }
}
  1. 在MyApplication中注册广播接收器,接收广播后退出应用程序:
public class MyApplication extends Application {

    private static MyApplication instance;
    private Stack<Activity> activityStack;
    private BroadcastReceiver exitReceiver;

    private MyApplication() {
        activityStack = new Stack<>();
    }

    public static synchronized MyApplication getInstance() {
        if (instance == null) {
            instance = new MyApplication();
        }
        return instance;
    }

    public void addActivity(Activity activity) {
        activityStack.push(activity);
    }

    public void exit() {
        while (!activityStack.isEmpty()) {
            Activity activity = activityStack.pop();
            activity.finish();
        }
        System.exit(0);
    }

    public void sendExitBroadcast() {
        Intent intent = new Intent("com.example.exit");
        sendBroadcast(intent);
    }

    @Override
    public void onCreate() {
        super.onCreate();

        exitReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                exit();
            }
        };
        registerReceiver(exitReceiver, new IntentFilter("com.example.exit"));
    }

    @Override
    public void onTerminate() {
        super.onTerminate();
        unregisterReceiver(exitReceiver);
    }
}

这样,当发送广播时,MyApplication中的广播接收器就会接收到广播并退出应用程序。

方式三

定义一个栈,写一个自定义的MyApplication,利用单例模式去单独对Activty进行管理,在每个Activity的onCreate()方法中调用MyApplication.getInstance().addActivity(this)将当前的Activity添加到栈中统一管理,如果需要退出应用程序时再调用MyApplication.getInstance().exit()方法直接就完全退出了应用程序。
需要退出时只要把进栈的活动一个个循环退出就可以。
以下是实现代码:

public class MyApplication extends Application {

    private static MyApplication instance;
    private Stack<Activity> activityStack;

    private MyApplication() {
        activityStack = new Stack<>();
    }

    public static synchronized MyApplication getInstance() {
        if (instance == null) {
            instance = new MyApplication();
        }
        return instance;
    }

    public void addActivity(Activity activity) {
        activityStack.push(activity);
    }

    public void exit() {
        while (!activityStack.isEmpty()) {
            Activity activity = activityStack.pop();
            activity.finish();
        }
        System.exit(0);
    }
}

在每个Activity的onCreate()方法中调用MyApplication.getInstance().addActivity(this):

public class MainActivity extends AppCompatActivity {

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

        MyApplication.getInstance().addActivity(this);
    }
}

需要退出应用程序时再调用MyApplication.getInstance().exit()方法:文章来源地址https://www.toymoban.com/news/detail-536158.html

public class ExitActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_exit);

        Button btnExit = findViewById(R.id.btn_exit);
        btnExit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MyApplication.getInstance().exit();
            }
        });
    }
}

到了这里,关于Android快速退出APP的几种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android常用的延迟执行任务及轮询定时任务的几种方式

    Executor 的 execute 方法:向线程池中提交任务(异步执行) Executor 接口是 Java 并发编程中的一个接口,它定义了一种执行任务的通用机制。Executor 接口有一个重要的方法 execute,它的作用是提交一个任务(Runnable 或 Callable)给 Executor 进行执行。 execute 方法的作用如下: 提交任务:

    2024年04月25日
    浏览(47)
  • Android App保活的方式

    在Android系统中,当应用程序进入后台或者被用户关闭后,系统会自动回收该应用程序的资源,以达到优化系统性能的目的。但是,有些应用程序需要在后台长时间运行,比如音乐播放器、即时通讯等,这时就需要使用一些技术手段来保持应用程序的运行状态,以确保应用程序

    2024年02月16日
    浏览(46)
  • Android不同APP之间共享数据的方式

    今天给大家介绍三种不同APP之间共享数据的方式 第一种:使用SharePreference 使用SharePreference共享数据 第二种:使用ContentProvider, 这个就不仔细讲了,大家看看其他文章吧 第三种:sharedUserId 通过SharedUser id,拥有同一个User id的多个APK可以配置成运行在同一个进程中.所以默认就是

    2024年02月10日
    浏览(51)
  • ARabbit:一个快速开发Android App的框架

    5.主要版本修订日志 6.引用的第三方库 7.SDK引用的开源框架 8.使用ARabbit的项目 欢迎加入Android开发交流QQ群: 1.简介 ============================================================== 提供App开发的接口,使开发者只关心App的业务实现,不用再关心具体功能实现,比如网络请求、图片加载、对话

    2024年04月25日
    浏览(32)
  • APP开发——目前APP开发的几种形式

    关于APP开发目前已经过了火热的阶段,现在学习APP开发的人越来越多,但在实际的业务场景中,APP开发还是有一部分的市场需求。 所以,这里简单记录一下APP开发的几种思路和方案。 首先,目前APP开发主要有两大平台,一个是安卓,一个是IOS,其他的比如微软的移动系统都

    2024年02月02日
    浏览(48)
  • 使用GoEasy快速实现Android原生app中的websocket消息推送

    摘要: GoEasy带来了一项令开发者振奋的消息:全面支持Android原生平台!现在,您可以在Android应用中使用最酷炫的实时通信功能,借助GoEasy轻松实现消息的发送和接收。本文将带您领略GoEasy最新版本的威力,为您的应用增添一抹鲜活的互动色彩。 嗨,开发者朋友们!是时候展

    2024年02月12日
    浏览(45)
  • Unity Android 之 读取下载获取移动端 sdcard 路径下的指定文件夹的所有图片的几种方式的简单整理

    目录 Unity Android 之 读取下载获取移动端 sdcard 路径下的指定文件夹的所有图片的几种方式的简单整理 一、简单介绍 二、实现原理 三、注意事项 四、简单实现步骤 五、关键代码 附录: 一、不同平台使用宏区分路径加载 二、Unity3D中的资源路径 三、Unity3D各平台路径(包括手

    2024年01月19日
    浏览(84)
  • 【App测试】adb三大连接方式-夜神模拟器+真机+android真机(详细步骤)

    adb连接安卓模拟器 1、检查夜神nox_adb.exe的版本与本地的adb版本是否一致 如果本地adb和夜神adb版本不一致,会相互查杀 1)检查本地adb的版本 在cmd命令行中输入: adb version ,为1.0.41版本 2)检查夜神中nox_adb.exe版本 进入到夜神的安装包的bin目录下,按住shif,点击右键,打开

    2024年02月03日
    浏览(76)
  • 最快速删除node_modules的几种方式

    先全局安装npm包 删除 node_modules 文件夹命令

    2024年02月08日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包