-
2018-06-22 10:42:20
程序在运行过程中,可能会由于某种原因而被干掉或者自己崩溃掉,为了增加可靠性,一般的做法就是在系统启动之后,自动起一个看门狗程序,来时刻看守应用程序。
由于本人对android也不是很精通 所以想到了以下办法,直接上代码
import android.app.ActivityManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import java.util.List; import java.util.Timer; import java.util.TimerTask; public class MainActivity extends AppCompatActivity { String m_sMonitorAppName = "app"; //要监测的App的包名 //这里我起了一个线程 /*********************************************************************/ class MyThread implements Runnable { public void run(){ while(true){ ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); List<ActivityManager.RunningAppProcessInfo> runningTasks = manager.getRunningAppProcesses(); // 获得当前最顶端的任务栈,即前台任务栈 ActivityManager.RunningAppProcessInfo runningTaskInfo = runningTasks.get(0); String packageName = runningTaskInfo.processName.toString(); if(!packageName.equals(m_sMonitorAppName)){ PackageManager packageManager = getPackageManager(); PackageInfo packageInfo = null; //在这里,该App虽然没在前台运行,也有可能在后台运行(未被结束), //为了更合理,应该先结束掉,但是注释的方法总是崩溃.......... //android.os.Process.killProcess(runningTaskInfo.pid); //结束进程 try { packageInfo = getPackageManager().getPackageInfo(packageName, 0); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } if(packageInfo != null){ Intent intent = packageManager.getLaunchIntentForPackage(m_sMonitorAppName); startActivity(intent);//启动App } } try { Thread.sleep(3000); //延时3s } catch (InterruptedException e) { e.printStackTrace(); } } } } /*********************************************************************/ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /* TimerTask task= new TimerTask() { @Override public void run() { } }; new Timer().schedule(task,2000,3000); 起初,没想用线程,想用一个定时器来看守,怎想,一直崩溃 */ MyThread startThread = new MyThread(); new Thread(startThread ).start(); //启动线程 } } // fest.xml文件加权限 <uses-permission android:name="android.permission.GET_TASKS"/>
上面的方法 经过初步测试 可以达到预期的作用
但是有没有漏洞还不知道 望各位指正更多相关内容 -
android 退出app 退出应用程序
2013-03-18 17:49:10在退出activity时,设置intent.setAction("exit_app");然后跳转到栈底activity, 这样就可以清除栈底之外的所有activity,程序会自动执行onNewIntent方法,在该方法中获取它action, 如果等于"exit_app",则关闭栈底... -
app自动化打开设置并退出
2022-03-23 20:26:18app自动化打开设置并退出前提环境:jdk jre 安卓sdk python环境 Pycharm中已安装Appium-python-client
选择代码 点击运行如果解释器不对 或者没有更换 点击
选择已安装Appium-python-client的解释器
运行代码即可
移动端后自动打开设置界面然后返回退出 -
【Flutter 返回桌面不退出app解决办法】
2022-02-14 17:24:46Flutter 返回桌面不退出app 1.MainActivity(kotlin版本的),之前的getFlutterView()提示找不到,改为flutterEngine.dartExecutor.binaryMessenger import androidx.annotation.NonNull import io.flutter....Flutter 返回桌面不退出app
- 1.MainActivity(kotlin版本的),之前的getFlutterView()提示找不到,改为flutterEngine.dartExecutor.binaryMessenger
import androidx.annotation.NonNull import io.flutter.embedding.android.FlutterActivity import io.flutter.embedding.engine.FlutterEngine import io.flutter.plugin.common.MethodChannel import io.flutter.plugins.GeneratedPluginRegistrant.* class MainActivity: FlutterActivity() { //通讯名称,回到手机桌面 private val CHANNEL = "android/back/desktop" override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { registerWith(flutterEngine); MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { methodCall, result -> if (methodCall.method == "backDesktop") { result.success(true) moveTaskToBack(false) } } } }
import android.os.Bundle; import io.flutter.app.FlutterActivity; import io.flutter.plugins.GeneratedPluginRegistrant; import android.view.KeyEvent; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; public class MainActivity extends FlutterActivity { //通讯名称,回到手机桌面 private final String CHANNEL = "android/back/desktop"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); GeneratedPluginRegistrant.registerWith(this); new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler( new MethodChannel.MethodCallHandler() { @Override public void onMethodCall(MethodCall methodCall, MethodChannel.Result result) { if (methodCall.method.equals("backDesktop")) { result.success(true); moveTaskToBack(false); } } } ); } }
- 2.flutter中添加一个自定义dart类
// dart类 import 'package:flutter/services.dart'; class AndroidBackDesktop{ //通讯名称,回到手机桌面 static const String CHANNEL = "android/back/desktop"; //设置回退到手机桌面事件 static const String eventBackDesktop = "backDesktop"; //设置回退到手机桌面方法 static Future<bool> backToDesktop() async { final platform = MethodChannel(CHANNEL); //通知安卓返回到手机桌面 try{ await platform.invokeMethod(eventBackDesktop); print("通信成功"); } on PlatformException catch (e){ print("通信失败,设置回退到安卓手机桌面失败"); print(e.toString()); } return Future.value(false); } }
- 3.类中使用:(在main.dart中使用不起效果,可能用了底部导航,于是添加到底部导航这里)
@override Widget build(BuildContext context) { return WillPopScope( onWillPop: () async { AndroidBackDesktop.backToDesktop(); //设置为返回不退出app return false; //一定要return false }, child:Text('fdsa'), ); }
-
【Flutter 问题系列第 24 篇】在 Flutter 中如何退出 APP
2021-06-23 17:52:19一:在 Flutter 中如何退出 APP。 二:在 Flutter 中设置一定时间时隔内退出 APP 的功能。这是【Flutter 问题系列第 24 篇】,如果觉得有用的话,欢迎关注专栏。
如果当前是在登录或者注册界面,用户点击退出事件时,一般都会做退出 APP 的功能,那么在 Flutter 中如何实现呢?
方式一
也是推荐的方式,所以放在了第一位,引入
import 'package:flutter/services.dart';
,在退出事件中调用下面代码就可以了。/// 退出 APP 方式一 void _doQuit() async { await SystemChannels.platform.invokeMethod('SystemNavigator.pop'); }
方式二
需要引入
import 'dart:io';
同样是在退出事件中调用下面代码即可。/// 退出 APP 方式二 void _doExit() { exit(0); }
实现两秒内多次点击退出按钮时,退出 APP
不过往往并不是用户点击退出 APP 时就直接退出了,而是先给出一个提示,提示用户再点一次将要退出 APP。
所以我们设定当用户在两秒内点了两次退出,就认为用户在执行退出 APP 的操作。
首先定义一个 DateTime 类型的变量 _lastTime
DateTime _lastTime; // 上次点击退出当前页面的时间
通过判断两次点击的时间差来决定是否执行退出 APP 操作,如下代码
void _doQuit() async { // 两秒内没有再点过退出按钮 if (_lastTime == null || DateTime.now().difference(_lastTime) > Duration(seconds: 2)) { // 重置最后一次点击的时间 _lastTime = DateTime.now(); // 弹出吐司,需引入插件 bot_toast,当然其它的吐司插件也行 BotToast.showText(text: "再按一次退出APP", align: Alignment.center); } // 两秒内点了两次退出按钮,则退出 APP else { await SystemChannels.platform.invokeMethod('SystemNavigator.pop'); } }
第一次点击时间间隔为2秒以上,第二次点击时间间隔为2秒内,最终的效果图如下所示
至此,在 Flutter 中退出 APP 的两种方式,以及在一定时间时隔内退出 APP 的功能便介绍完毕。
你的问题得到解决了吗?欢迎在评论区留言。
赠人玫瑰,手有余香,如果觉得文章不错,希望可以给个一键三连,感谢。
结束语
无论你是 Flutter 新手还是已经入门了,不妨先点个关注,后续我会将 Flutter 中的常用组件(含有源码分析、组件的用法及注意事项)以及可能遇到的问题写到 CSDN 博客中,希望自己学习的同时,也可以帮助更多的人。 -
【MATLAB appdesigner】 09_如何退出界面前再确认(防止手误退出)?
2021-01-29 22:12:43创作时间:2021-01-29 标题: 【视频讲解】MATLAB appdesigner神招数005_如何退出界面前再确认(防止手误退出)? 目录: 无 正文: THE END~ -
uni-app实现再次返回退出应用时不退出应用而是在后台运行
2020-06-08 15:43:11如果APP需要后台驻留,用户返回到首页时会提示退出操作,我们可以不退出而是隐藏至后台,这样的话APP就会在后台运行,以下代码须写在main.js里面,弹出的内容可自定义设置。 let main = plus.android.... -
Android 实现彻底退出自己APP 并杀掉所有相关的进程
2021-06-02 20:24:27彻底杀掉 App 相关进程的代码public void killAppProcess(){//注意:不能先杀掉主进程,否则逻辑代码无法继续执行,需先杀掉相关进程最后杀掉主进程ActivityManager mActivityManager = (ActivityManager)Current... -
安卓一键退出APP
2020-08-26 11:30:47安卓一键退出App 1、安卓退出程序有几种方法 首先要实现两个步骤 退出当前所有的activity 结束当前APP的进程 2、怎么退出所有的Activity 百度找了很多的资源,网上使用的方法有很多中,我使用的是每当Activity创建... -
uni-app 退出app操作
2020-03-31 10:00:35uni-app 退出app //安卓退出 // #ifdef APP-PLUS if (plus.os.name.toLowerCase() === 'android') { plus.runtime.quit(); } else{ const threadClass = plus.ios.importClass("NSThread"); const ... -
uniapp同意使用,不同意退出APP
2020-07-02 16:37:04用户不同意就会退出APP。同意了就跳转到首页。 那怎么才能判断用户下载APP,是否有同意使用呢。并且用户卸载重装后仍然会提示用户同意。 我们可以在用户点击同意时,保存一个关键词在本地。根据这个关键词是否存在... -
uniapp app退出应用
2021-12-15 14:48:11uni-app App退出应用 -
uniapp 电商app 退出app功能实现
2020-10-12 14:48:40这个退出app是app退出到后台运行,而不是退出当前账号。 为了兼容安卓与IOS,退出功能代码如下: // #ifdef APP-PLUS if (plus.os.name.toLowerCase() === 'android') { plus.runtime.quit(); }else{ const ... -
android中彻底退出App的办法
2019-05-15 15:30:20所谓的“彻底退出App”的含义是包括释放所有App new出来的东西,比如说某些正在运行的线程、定时器之类的。 需要注意的是:finish()方法是作用于Activity,因此,即使finish了app的最后一个Activity,app在运行... -
h5打包app点击手机返回键直接退出app的解决方法
2021-11-09 16:33:13由于onbackPress在app上不生效,于是用js的方式去做了拦截,实现了点击物理返回键返回上一页,而不是退出app。(提示:代码放在main.js文件中,不要乱放) // android点击手机物理返回键退出app bug解决 document.... -
给App整体设置activity的进入退出动画
2016-12-30 20:16:03给App整体设置activity的进入退出动画 resources> style name="AppTheme" parent="Theme.AppCompat"> item name="android:windowContentTransitions">trueitem> item name="colorPrim -
Android退出应用结束当前App的所有Activity&结束app进程
2019-10-23 10:31:31//清除 } 再按一次退出 App // 再点一次退出程序时间设置 private long TOUCH_TIME = 0L; //当前时间与上次点击返回键的时间差 private static final long WAIT_TIME = 2000L; @Override public boolean onKeyDown... -
App退出后不想在任务管理器列表中显示只需activity添加excludeFromRecents
2022-03-31 10:43:17App退出后不想在任务管理器列表中显示,只需要在AndroidManifest.xml中的启动Activity添加 android:excludeFromRecents=“true” true:不在任务管理器列表显示 false:在任务管理器列表显示 -
uni-app怎么实现双击返回退出app
2019-12-03 15:10:17uni-app提供了一个监听返回按钮的api:onBackPress(event) //监听返回键 onBackPress() { uni.showModal({ title: '提示', content: '是否退出来聊?', success: function(res) { if (res.... -
Android 完全退出app程序
2020-11-10 15:39:48Android 完全退出app程序(不保留历史打开app记录) finishAndRemoveTask();//该方法在API level 21之后添加。 System.exit(0); android.os.Process.killProcess(android.os.Process.myPid()); -
Android App退出检测
2017-03-20 20:05:59app的退出检测是很难的,但是获取app“要退出”的状态就容易多了,退出的瞬间并不是真的退出了,ActivityManager要销毁activity,也需要一些时间和资源的。 先见下面的运行效果: gif做的比价粗啊, 两个activity... -
android 监听 app 启动和退出
2020-10-30 18:00:36最近有一个需求是需要在程序...话不多说上代码,首先在 application 里面添加监听方法。 class BaseApplication : Application() { private val checkObserver = CheckObserver() override fun onCreate() { s -
RN:使用react-native-exit-app退出app
2021-12-21 17:05:41比如不同意隐私协议的时候。 react-native-exit-app import RNExitApp from 'react-native-exit-app'; ... RNExitApp.exitApp(); ... 看了下源码,是这样退出的: android @ReactMethod public void exitApp() { ... -
Android 点击按钮退出整个App
2021-12-21 09:24:13Android 点击按钮退出整个App -
Android 中几种优雅的退出APP方式介绍
2018-07-10 09:28:26最近由于项目的修改,项目由MainActivity按返回键一次退出修改为MainActivity中连续按两次返回键退出,顺便优化一下推出这里的代码。因此还是在网上搜索了一番,总结比较之后得出了有以下集中方式,优缺点都会提出来... -
uni-app 退出、登录按钮模板
2021-02-05 14:06:40话不多说, 直接上代码 <view class="app-ment"> <text class="mix-btn" @click="logout">退出登录</text> </view> css样式: /* 按钮 */ .mix-btn { display: flex; align-items: ... -
关于app退出的问题,完美退出方式
2017-06-20 09:43:43实际开发中会有很多关于app的退出问题,我个人比较常见的有两种: 一、双击退出 比如说我们在首页的时候需要一个双击退出的方法,点击第一次手机的返回键时提示:“再点一次退出应用”。之类的话语,我们可以这样... -
App 安全退出
2018-06-07 09:49:32// TODO 还没开始呢,稍等片刻