精华内容
下载资源
问答
  • linux退出bash_Linux Bash退出退出代码

    千次阅读 2020-10-07 02:55:30
    linux退出bashLinux bash shell provide simple but useful programming environment. We can write simple applications, scripts which will run commands, redirect input and outputs and create, stop process....
    linux退出bash

    linux退出bash

    Linux bash shell provide simple but useful programming environment. We can write simple applications, scripts which will run commands, redirect input and outputs and create, stop process. After the execution of the script or function we may need to provide some information to script caller. exit keyword is used to end given script with useful information. In this tutorial we will examine different use cases with exit and send exit status to the program or script caller.

    Linux bash shell提供了简单但有用的编程环境。 我们可以编写简单的应用程序,脚本来运行命令,重定向输入和输出以及创建,停止进程。 执行脚本或函数后,我们可能需要向脚本调用者提供一些信息。 exit关键字用于以有用的信息结束给定脚本。 在本教程中,我们将研究具有exit不同用例,并将退出状态发送给程序或脚本调用者。

    以最后命令的状态退出 (Exit With Status Of Last Command)

    We will start by providing the status of the last command as exit status. We generally run commands in scripts or applications. Every command executed in this scripts or applications will finish execution with a status. The last command exit status can be provided at the end of the script in 3 different ways.

    我们将从提供最后一个命令的状态作为退出状态开始。 我们通常在脚本或应用程序中运行命令。 在此脚本或应用程序中执行的每个命令都将以状态结束执行。 可以在脚本末尾以3种不同的方式提供最后一个命令的退出状态。

    • Simply doing nothing will provide the last command exit status as the script exit status. In the following example the ls command exit status will be also the exit status of the script.

      简单地不执行任何操作将提供最后的命令退出状态作为脚本退出状态。 在以下示例中, ls命令的退出状态也将是脚本的退出状态。

    #!/bin/bash 
    
    ls /home
    
    • Or we can explicitly use the exit keyword in order to send the staus of the ls command like below.

      或者我们可以显式地使用exit关键字来发送ls命令的状态,如下所示。

    #!/bin/bash 
    
    ls /home 
    
    exit
    
    • Or the most explicit version is using exit $? which will return the last executed command status with $? by providing exit .

      还是最明确的版本正在使用exit $? 哪个将返回带有$?的最后执行的命令状态$? 通过提供exit

    #!/bin/bash 
    
    ls /home 
    
    exit $?
    

    打印最后一个命令的退出状态 (Print Last Command Exit Status)

    As we learned in previous part we can use $? in order to provide the last command exit status. This is actually a bash feautre which can be used in different ways apart from scripts. Here we will run mkdir command with a unsuccessful operation to create a folder in /root/test which will give Permission denied error. Then we will print the exit status of this mkdir command $?

    如前所述,我们可以使用$? 为了提供最后的命令退出状态。 这实际上是一个bash feautre,除了脚本之外,还可以以其他方式使用。 在这里,我们将使用不成功的操作运行mkdir命令,以在/root/test创建一个文件夹,该文件夹会出现PermissionPermission error错误。 然后,我们将打印此mkdir命令$?的退出状态$?

    $ mkdir /root/test 
    
    $ echo $?
    
    Print Last Command Exit Status
    Print Last Command Exit Status
    打印最后一个命令的退出状态

    As we can see this will print 1 which means there is an error. We will learn exit status codes in the following parts.

    如我们所见,这将打印1 ,表示存在错误。 我们将在以下部分中学习退出状态代码。

    LEARN MORE  Linux Bash Pipe Command Usage with Examples For Redirection
    了解更多Linux Bash Pipe命令用法以及重定向示例

    明确提供退出状态(Explicitly Provide Exit Status)

    While exexuting scripts and applications we can provide the exit code explicitly. We just provide the code we want to provide to the exit keyword. Keep in mind that the exit will exit the current running script,application or process. In this example we will provide the exit status as 17 .

    在执行脚本和应用程序时,我们可以显式提供退出代码。 我们只提供要提供给exit关键字的代码。 请记住, exit将退出当前正在运行的脚本,应用程序或进程。 在此示例中,我们将退出状态设置为17

    #!/bin/bash 
    
    ls /home 
    
    exit 17
    

    成功退出状态 (Success Exit Status)

    There are different exit status codes and meanings. But there are some general rules. Success exit status code is  which will accepted by the Linux community. In the following example we will provide successful exit status from given script.

    有不同的退出状态代码和含义。 但是有一些通用规则。 成功退出状态代码为这将被Linux社区接受。 在以下示例中,我们将提供给定脚本的成功退出状态。

    #!/bin/bash 
    
    ls /home 
    
    exit 0
    

    一般错误退出状态 (General Errors Exit Status)

    As stated previously there different type of codes. We can also create our own codes and their meanings. Here is most generic and accepted exit status codes.

    如前所述,存在不同类型的代码。 我们还可以创建自己的代码及其含义。 这是最通用和可接受的退出状态代码。

    •  exit code is used to state command or script execution is completed succesfully.

      退出代码用于说明命令或脚本执行成功完成。

    • 1 exit code is used to state that there are general errors like divide by zero etc.

      1退出代码用于声明存在一般错误,例如divide by zero等。

    • 2 exit code is used to state there is a misuse of the shell builtin.

      2退出代码用于说明内置shell的滥用。

    We can also create our own exit status code and interpret it. For example we can use 17 as successful completion but there are some minor warnings.

    我们还可以创建自己的退出状态代码并对其进行解释。 例如,我们可以使用17作为成功完成,但是有一些次要警告。

    exit 17

    exit 17

    将退出状态设置为变量 (Set Exit Status Into A Variable)

    While working with exit status we may need to set the exit status of given script, application or command into a variable. This is very simple case where we will use $? and variable assignment for this.

    在处理退出状态时,我们可能需要将给定脚本,应用程序或命令的退出状态设置为变量。 这是非常简单的情况,我们将使用$? 并为此进行变量分配。

    $ mkdir /root/test 
    
    $ last_exit_status=$? 
    
    $ echo $last_exit_status
    
    Set Exit Status Into A Variable
    Set Exit Status Into A Variable
    将退出状态设置为变量

    As we can see the exit status is saved into variable named last_exit_status and get the exit value 1

    如我们所见,退出状态保存到名为last_exit_status变量中,并获得退出值1

    翻译自: https://www.poftut.com/linux-bash-exit-and-exit-codes/

    linux退出bash

    展开全文
  • python退出命令-python退出指令

    千次阅读 2020-11-01 13:10:34
    cmd中如何退出python (1)在命令行上输入exit() (2)在命令行上输入quit()好像还有一种方法是在命令行上输入ctrl+z,再按回车,但是我一直成功不了,? 有知道出现什么问题的,麻烦给我说一下...要退出python命令行,我...

    o55g08d9dv.jpg广告关闭

    腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元!

    3hrwb0qu0j.png

    cmd中如何退出python (1)在命令行上输入exit() (2)在命令行上输入quit()好像还有一种方法是在命令行上输入ctrl+z,再按回车,但是我一直成功不了,? 有知道出现什么问题的,麻烦给我说一下...

    要退出python命令行,我必须输入exit()。 如果我输入退出,它提示:use exit() or ctrl-z plus return to exit为什么解释者在知道我正在尝试退出命令行时向我提供上述错误? 为什么它不会退出?...

    在linux环境下退出python命令模式原创 2016年11月03日 10:36:30 如果在命令行终端已经进入到python命令模式,如下python2. 7. 7(default,jun32014,01:46:20)onlinux2typehelp,copyright,creditsorlicenseformoreinformation.使用 quit(), exit(),或者ctrl-d退出python命令模式。 quit()...

    pyenv installversion_you_would_like_to_install列出所有可用版本pyenv install--list 为了使上述过程更加具体,在此安装python3. 7.5并且设置其为默认的全局解释器。 pyenv install 3. 7.5pyenv global 3.7. 5输入python-version指令,屏幕将显示python3. 7. 5依赖关系管理 使用pip和pyenv-virtualenv指令 为什么...

    usrbinpythonfor f in xrange(1,10): for j in xrange(1,f+1):print %sx%s=%s % (j, f, j*f),printfor循环退出python的for循环退出也是和shell里的三个...将序列中各个元素取出来直接从序列取值通过索引来取值迭代,指重复执行一个指令首先创建一个测试使用的字典in : nico = {a:1,b:2,c:3}in :type(nico)out: ...

    是提示符,需要在在这个符号后面输入下一步执行的指令。 比如我们要计算2*2.5,可以这样:>>> 2 * 2. 55.0python计算出结果是5.0。 也可以输出一个字符串,比如“hello, python!:>>> print (hello, python!)hello,python! 输入exit()以退出python:>>> exit()下面的图片展示了操作过程:? python也可以执行脚本...

    主线程退出时也不会杀掉所有daemon线程,直到所有 non-daemon 线程全部结束,如果还有 daemon 线程,主线程需要退出,会结束所有的 daemon 线程退出threading.localpython 提供 threading.local 类,将这个类实例化得到一个全局对象,但是不同线程使用这个对象存储的数据其他线程看不见。 ctx = threading.local()ctx...

    hfow0ziiuk.png

    线程可以调用 thread.exit()之类的退出函数,也可以使用 python 退出进程的标准方法,如 sys.exit()或抛出一个 systemexit 异常等。 不过,你不可以直接 “杀掉”(“kill”)一个线程。 在 python 中使用线程在 win32 和 linux, solaris, macos,*bsd 等大多数类 unix 系统上运行时,python 支持多线程 编程。 python ...

    2yn6gk26dt.jpeg

    那么对于 协程 来说,上下文又是什么呢? 而进程的切换是,操作系统控制,也由操作系统执行。 python 的线程切换,是由 python 虚拟机控制,通过一个系统调用,来进行线程切换。 协程的切换过程完全由程序自身控制。 进程的切换 需要 切换系统资源和指令,消耗时间最长线程的切换,不需要切换系统资源,只需要切换...

    正常退出(自愿,如用户点击交互式页面的叉号,或程序执行完毕调用发起系统调用正常退出,在linux中用exit,在windows中用exitprocess) 2. 出错退出(自愿,python a.py中a.py不存在) 3. 严重错误(非自愿,执行非法指令,如引用不存在的内存,10等,可以捕捉异常,try... except... 4. 被其他进程杀死(非自愿,如...

    因为jupyter自身是一个进程,对于jupyter当中的cell而言,它一直是有用户级线程存活的,所以进程不会退出。 所以想要看到这样的效果,只能通过命令行执行python文件。 如果我们想要等待这个子线程结束,就必须通过join方法。 另外,为了预防子线程锁死一直无法退出的情况, 我们还可以在joih当中设置timeout...

    469yeoabaw.png

    正常退出(自愿,如用户点击交互式页面的叉号,或程序执行完毕调用发起系统调用正常退出,在linux中用exit,在windows中用exitprocess) 2. 出错退出(自愿,python a.py中a.py不存在) 3. 严重错误(非自愿,执行非法指令,如引用不存在的内存,10等,可以捕捉异常,try... except... 4. 被其他进程杀死(非自愿,如...

    缺点是语言属于解释性语言,会比常规编译型语言跑起来慢(毕竟要一点一点解释给cpu)。 ----安装pythonmac下安装python3,通过homebrew进行安装,即:brew install python3为以后方便使用,在~.zshrc 内添加alias py=python3使用python3指令只需输入py即可。 ----第一个程序语言概述python是解释型语言。 需要解释器...

    api 3.0 explorer sdk云 api 3.0 提供了配套的开发工具集(sdk),支持多种编程语言,能更方便的调用 api。 tencent cloud sdk 3.0 for pythontencent ...退出企业组织默认接口请求频率限制:20次秒。 推荐使用 api explorer 点击调试 api explorer 提供了在线调用、签名验证、sdk代码生成和快速检索接口等能力...

    3vw8qgke7c.png

    作者 weak_time编辑 zenrran原文链接http:blog.163.comweak_timeblogstatic25852809120169333247925python的命令行参数,提供了很多有用的功能,可以方便调试和运行,通过man python就能查看,以下是一些常用参数使用实例和场景:1. -b参数,在import时候,不产生pyc或者pyo文件:比如有a.py,内容如下:? main.py,会...

    tencent cloud sdk 3.0 for pythontencent cloud sdk 3.0 for javatencent cloudsdk 3.0 for phptencent cloud sdk 3.0 for gotencent cloud sdk 3.0 for...强制退出游戏默认接口请求频率限制:20次秒。 推荐使用 api explorer 点击调试 api explorer 提供了在线调用、签名验证、sdk代码生成和快速检索接口等能力...

    我们可以采用以下两种方法:如果类似于tcp采用约定退出指令的方法,那么客户端发送退出指令后就调用close方法,然后服务端根据得到的指令剔除客户端字典中...python 提供了两个级别访问的网络服务。 低级别的网络服务支持基本的 socket,可以访问底层操作系统socket接口的方法。 高级别的网络服务模块 socket...

    sy27kqzyex.png

    virtualenv 是一个创建隔绝的python环境的工具,virtualenv创建一个包含所有必要的可执行文件的文件夹,用来使用python工程所需的包。 不同系统下如何安装...退出虚拟环境:使用cd命令切换到创建的虚拟环境文件夹下的script目录,执行deactivate.bat退出虚拟环境,操作如下: ? 退出虚拟环境删除虚拟环境:直接删除...

    正常退出(自愿,如用户点击交互式页面的叉号,或程序执行完毕调用发起系统调用正常退出,在linux中用exit,在windows中用exitprocess) 2. 出错退出(自愿,python a.py中a.py不存在) 3. 严重错误(非自愿,执行非法指令,如引用不存在的内存,10等,可以捕捉异常,try... except... 4. 被其他进程杀死(非自愿,如...

    2vos60anj0.jpeg

    点击上方“咸鱼学python”,选择“加为星标”第一时间关注python技术干货!? 作者:destiny原文:https:learnku.comarticles23010teach-you-to-read-the...然后使用 pdb 的 up、down、n 等命令调试。 当然在目标位置添加一些 print 日志或注释部分代码然后直接使用 exit()退出也是可以的。 善用文档阅读一个项目...

    展开全文
  • 退出页面自动清除session技巧

    热门讨论 2015-08-01 15:18:14
    退出页面自动清除session技巧
  • python退出程序-python退出程序

    千次阅读 2020-11-01 13:00:24
    python退出程序的方式有两种:os._exit(),sys.exit() 1)os._exit() 直接退出 python程序,其后的代码也不会继续执行。 2)sys.exit() 引发一个 systemexit异常,若没有捕获这个异常,python解释器会直接退出; ...

    o55g08d9dv.jpg广告关闭

    腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元!

    python退出程序的方式有两种:os._exit(),sys.exit() 1)os._exit() 直接退出 python程序,其后的代码也不会继续执行。 2)sys.exit() 引发一个 systemexit异常,若没有捕获这个异常,python解释器会直接退出; 捕获这个异常可以做一些额外的清理工作。 0为正常退出,其他数值(1-127)为不正常,可抛异常事件供捕获...

    docs.python.org3libraryasyncio-eventloop.html#asyncio.abstracteventloop.shutdown_asyncgens loop.close()利用异步python3.5 之后,有了比较完善的...wait all task done! run_task 2 done上面的程序,无论何时重启,都将等待所有后台的任务完成。 妈妈再也不用担心我重启服务被用户投诉了...

    易于阅读:python代码定义更清晰。 易于维护:源代码是相当容易维护的。 广泛的标准库:python的最大的优势之一是丰富的库,跨平台的,在unix,windows和macintosh兼容很好。 可移植:基于其开放源代码的特性,python已经被移植(也就是使其工作)到许多平台。 可嵌入: 可以将python嵌入到cc++程序,让你的程序的用户...

    我试图在不使用sys.exit()的情况下退出程序。 询问用户是否希望继续,如果他们输入“是”,则表示打印出来并且程序继续运行。 如果他们输入任何其他内容,则会打印出表示他们选择退出的消息,然后该程序将退出。 def keep_going():answer = raw_input(do you wish to continue?) if answer == yes:print you have ...

    h8e9gjh751.png

    本节课涉及的知识①from sys import exit从sys模组中引入exit即退出功能python退出程序的方式有两种:os._exit(),sys.exit()1)os._exit() 直接退出 python程序,其后的代码也不会继续执行。 2)sys.exit() 引发一个 systemexit异常,若没有捕获这个异常,python解释器会直接退出; 捕获这个异常可以做一些额外的...

    一.脚本要求启动程序后,让用户输入工资,然后打印商品列表; 允许用户根据商品的编号购买商品; 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒; 结算购物车,打印已购买商品和余额; 可随时退出程序; 二. 涉及python知识点注释变量用户输入 列表(list)元组(tuple)数值运算if流程语句while循环语句for...

    看看计算结果是不是300:>>>100+2003003、使用python打印出指定的文字可以用print语句,然后把希望打印的文字用单引号或者双引号括起来,但不能混用单引号和双引号:printhelloworldhelloworld这种用单引号或者双引号括起来的文本在程序中叫字符串4、最后,用exit()退出python>>>exit()#我们的第一个python程序完成!...

    usrbinenvpython#coding=utf-8name=raw_input(请输入你的用户名:)whilename! =fgf:name=raw_input(没有查询到此用户。n请重新输入你的用户名:)else:password=raw_input(请输入你的密码:)p=123whilepassword! =p:password=raw_input(错误密码,请重新输入:)else:print欢迎进入查询系统。 (输:q退出)whiletrue...

    启动程序后,让用户输入工资,然后打印商品列表2. 允许用户根据商品编号购买商品3. 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒4. 可随时退出,退出时,打印已购买商品和余额首先分析第1条,输入工资,只需要执行一次即可,所以它是在循环外层的。 另外得判断,输入的是否是数字,需要用到isdigit()...

    zp17i7gk27.png

    思路:基于python+tkiner的程序,在单机右上角x按钮关闭程序时,会触发wm_delete_window消息,如果可以截获这个消息并改变其行为,就可以禁止关闭程序。 具体实现和应用:在我开发的“课堂教学管理系统”中,因为有屏幕广播的功能,所以不允许学生关闭客户端,这样可以在最大程度上保证学生的学习效果(最起码不能在...

    |+-----+-----+-----+-----+-----+-----+5 rowsin set (0.02 sec) mysql>python atm程序v1#####main.py##程序入口文件#! usrbinpython#-*-coding...err_count+=1iferr_count==3:printu错误输入密码超过三次,程序自动退出! ##sql=updateloginuserseterr_time=2016-09-0215:40:01whereuser=gao1...

    输入时请您仔细核实,按回车键进行输入,按esc键进行退出。 n3.输入完成后按回车键进行奖品领取。 n, none)) def keypressevent(self, event):if event.key() == qtcore.qt.key_return:dialog=checkui_dialog() dialog.show() dialog.setmodal(false) dialog.exec_()#print showcheckdialog else:#when the normal ...

    第一个 python 程序目标第一个 hellopython 程序python 2.x 与 3.x 版本简介执行python 程序的三种方式 解释器 —— python python3交互式 ——ipython集成开发环境 —— pycharm01. 第一个 hellopython 程序1.1 python 源程序的基本概念python源程序就是一个特殊格式的文本文件,可以使用任意文本编辑软件做 python ...

    foosulivia.png

    第一个 python 程序目标第一个 hellopython 程序python 2.x 与 3.x 版本简介执行python 程序的三种方式 解释器 —— python python3交互式 ——ipython集成开发环境 —— pycharm01. 第一个 hellopython 程序1.1 python 源程序的基本概念python源程序就是一个特殊格式的文本文件,可以使用任意文本编辑软件做 python ...

    脚本背景:主管要求看门狗程序不仅仅只是看门,还要在看门成功的时候发送邮件给各个开发人员,而且必须要用公司原有的python程序作为发送邮件的主程序,所以需要在原有的看门狗程序上加一句话,而这个看门狗程序恰恰是shell程序,两种不同程序混搭交织,还有变量的混搭交织,很是让人爱恨交织。 那个发送邮件的程序...

    fxh019d2am.png

    虽然python的语法简单、灵活,但也一样存在一些不小的坑,一不小心,初学者和资深python程序员都有可能会栽跟头。 本文为大家分享了10大常见错误,需要的朋友可以参考下常见错误1:错误地将表达式作为函数的默认参数在python中,我们可以为函数的某个参数设置默认值,使该参数成为可选参数。 虽然这是一个很好的语言...

    h(帮助)a(rgs)打印当前函数的参数j(ump)让程序跳转到指定的行数l(ist)可以列出当前将要运行的代码块n(ext)让程序运行下一行,如果当前语句有一个函数调用,用n是不会进入被调用的函数体中的p(rint)最有用的命令之一,打印某个变量q(uit)退出调试r(eturn)继续执行,直到函数体返回s(tep)跟n相似,但是如果当前有一个...

    我想从另一个python程序启动一个python程序并同时退出以前的程序。 在这里我做了: if(self.start_button.pression==1):os.system(python program_to_launch.py) sys.exit() 结果很明显,程序启动program_to_launch.py并等到它完成运行。 问题出在while循环中,刚刚启动的程序内部。 它可以无限期地使用。 这是问题...

    一、第一个python程序 - 1. 命令行模式在windows开始菜单选择“命令提示符”,就进入到命令行模式,它的提示符类似c:>:在命令行模式下,可以使用python hello.py运行 .py文件2.python交互模式在命令行模式下敲命令python,然后就进入到python交互模式,它的提示符是>>>。 在python交互模式下输入exit()并回车,就...

    记录一次诡异的python-supervisor的异常退出python代码环境python2.7的环境tlinux2.2(centos7) 系列python程序的代码,托管给supervisor代码更新步骤升级代码然后重启服务 `supervisorctl restart$python-name现象1. 同一份代码,本地使用python手动运行没问题通过python-supervisor托管的一直不更新找点日志看看...

    展开全文
  • 使用android:process和Process.killProcess和UncaughtExceptionHandler完成Android应用程序不异常退出
  • Android退出应用的方法总结

    千次阅读 2018-11-19 12:51:33
    java基础总结目录这是Android常见的几种退出应用的方法,在此做一个总结,这几种方法各有利弊,可以自己去尝试一下。一、容器式二、任务栈式三、广播式四、 进程式五、 任务管理器六、 广播+singletask七、...

    这是Android常见的几种退出应用的方法,在此做一个总结,这几种方法各有利弊,可以自己去尝试一下。

    一、容器式

    建立一个全局容器,把所有的Activity存储起来,退出时循环遍历finish所有Activity

    
    import android.app.Activity;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * Created by LY on 2017/6/19.
     * 随时随地的退出程序
     * 通过一个List来暂存活动,然后提供了一个addActivity()方法用于向List中添加一个活动,
     * 提供了一个removeActivity()方法用于从List中移除活动,
     * 最后提供了一个finishAllActivity()方法用于将List中存储的活动全部都销毁掉。
     *
     * 使用方式:
     * 在BaseActivity中的onCreate()方法中调用addActivity()方法,表明将当前正在创建的活动添加到活动管理器里。
     * 然后在BaseActivity中的onDestory()方法中调用removeActivity()方法,,表明将马上要销毁的活动从活动管理中移除。
     * 从此以后,不管你想在什么地方退出程序,只需要调用ActivityCollectorUtil.finishAllActivity()方法就可以了。
     */
    
    public class ActivityCollectorUtil {
    
        public static List<Activity> activities = new ArrayList<Activity>();
    
        /**
         * 添加新的activity到集合中
         *
         * @param activity
         */
        public static void addActivity(Activity activity) {
            activities.add(activity);
        }
    
        /**
         * 从集合中移除相应的activity
         *
         * @param activity
         */
        public static void removeActivity(Activity activity) {
            activities.remove(activity);
        }
    
        /**
         * 关闭所有的活动(activity),即退出程序
         */
        public static void finishAllActivity() {
            for (Activity activity : activities) {
                if (!activity.isFinishing()) {
                    activity.finish();
                }
            }
        }
    }
    
    //使用方式
    public class BaseActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            ActivityCollectorUtil.addActivity(this);
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            ActivityCollectorUtil.removeActivity(this);
        }
    }
    

    这种方法比较简单,是目前许多人常用的, 但是可以看到activityStack持有这Activity的强引用,也就是说当某个Activity异常退出时,activityStack没有即使释放掉引用,就会导致内存问题。

    二、任务栈式

    利用一个单例模式的Activity栈来管理所有Activity

    • 自定义 Application类,储存每一个Activity,并实现关闭所有Activity的操作
    public class MyApplication extends Application {    
        private List<Activity> activityList = new LinkedList<Activity>();
        private static MyApplication instance;
        private MyApplication() {
        }
        
        @Override
        public void onCreate() {
            super.onCreate();
        }
        
        //单例模式中获取唯一的MyApplication实例
        public static MyApplication getInstance() {
            if(null == instance) {
                instance = new MyApplication();
            }
            return instance;
        }
        
       //添加Activity到容器中
        public void addActivity(Activity activity)  {
            activityList.add(activity);
        }
        
       //遍历所有Activity并finish
        public void exit() {
            for(Activity activity:activityList) {
                activity.finish();
            }       
            activityList.clear();
        }
    }
    
    • 在父类BaseActivity中添加继承子类Activity到栈中
    public class BaseActivity extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            // 添加Activity到堆栈
            MyApplication.getInstance().addActivity(this);
        }
        ...
    }
    
    • 在需要结束所有Activity的时候调用exit方法
    MyApplication.getInstance().exit();
    

    存在问题:同方法一

    三、广播式

    通过在BaseActivity中注册一个广播,当退出时发送一个广播,finish退出。

    /**
     * Created by LY on 2017/6/19.
     * 通过广播的方式退出应用
     */
    public class BaseActivity extends Activity {
    
        private static final String EXITACTION = "action.exit";
    
        private ExitReceiver exitReceiver = new ExitReceiver();
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            IntentFilter filter = new IntentFilter();
            filter.addAction(EXITACTION);
            registerReceiver(exitReceiver, filter);
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            unregisterReceiver(exitReceiver);
        }
    
        class ExitReceiver extends BroadcastReceiver {
    
            @Override
            public void onReceive(Context context, Intent intent) {
                BaseActivity.this.finish();
            }
    
        }
    
    }
    

    发送广播退出app

    public class MainActivity extends BaseActivity {
        private long exitTime = 0;
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    // 物理返回键,双击退出
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
                if ((System.currentTimeMillis() - exitTime) > 2000) {
                    Toast.makeText(MainActivity.this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
                    exitTime = System.currentTimeMillis();
                } else {
                    //发送广播退出程序
                    Intent intent = new Intent("com.xxx.BaseActivity");
                    intent.putExtra(EXITACTION, 1);
                    sendBroadcast(intent);
                }
                return true;
            }
            return super.onKeyDown(keyCode, event);
        }
    }
    

    四、 进程式

    • android.os.Process.killProcess(android.os.Process.myPid());
      可以杀死当前应用活动的进程,这一操作将会把所有该进程内的资源(包括线程全部清理掉)。当然,由于ActivityManager时刻监听着进程,一旦发现进程被非正常Kill,它将会试图去重启这个进程。
    • System.exit(0);正常退出
      System.exit(1);//非正常退出
      Java中结束进程的方法,调用它将关闭当前的JVM虚拟机。

    这两种都能达到同样的效果,但是在模拟器上都会弹出 Unfortunately , XXX has stopped 消息提示框,但确实能退出应用。部分真机直接失效,只能finish当前Activity(比如我手上这台小米note,国产的几款ROM fw层改动太多,使用这种方式需慎重) 。
    KillProcess() 和 System.exit(),许多人都使用过,当你栈里只有一个Activity的时候,这个措施是行之有效的。但当关闭多个Activity的时候,栈里有多个Activity时,这两个方法就不起作用了。
    因为通过杀进程方式退出,会被系统认为异常退出,会保存应用的一些状态信息比如Activity运行栈,然后会恢复这个应用。当恢复一个Android应用程序时,会先从栈里面移除异常的Activity,相当于Back键操作。

    五、 任务管理器

    系统将终止一切和这个程序包关联的,所有共享同一uid的process全部杀掉,还会停止相关的服务以及移除所有的Activity,并且会发送一个广播。

    <uses-permission android:name="android.permission.RESTART_PACKAGES"/>
    
    //注意在Android 2.2(API 8)之后,restartPackage方法已经过时
    ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);
    am.restartPackage(getPackageName());
    

    但是在Android 2.2(API 8)之后,restartPackage方法已经过时,不可以将应用程序结束,需要使用ActivityManager类的 killBackgroundProcesses方法。

    <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>  
    
    ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);
    am.killBackgroundProcesses(getPackageName());
    

    使用时需要注意:该方法虽然可以立即杀死与指定包相关联的所有后台进程,但是这些进程如果在将来某一时刻需要使用,便会重新启动。

    六、 广播+singletask

    我们知道Activity有四种加载模式,而singleTask就是其中的一种,使用这个模式之后,当startActivity时,它先会在当前栈中查询是否存在Activity的实例,如果存在,则将其至于栈顶,并将其之上的所有Activity移除栈。我们打开一个app,首先是一个splash页面,然后会finish掉splash页面。跳转到主页。然后会在主页进行N次的跳转,期间会产生数量不定的Activity,有的被销毁,有的驻留在栈中,但是栈底永远是我们的HomeActivity。这样就让问题变得简单很多了。我们只需两步操作即可优雅的实现app的退出。

    • 在HomeActivity注册一个退出广播,和第二个广播式一样,但是这里只需要在HomeActivity一个页面注册即可。

    • 设置HomeActivity的启动模式为singleTask。

    当我们需要退出的时候只需要startActivity(this,HomeActivity,class), 再发送一个退出广播。上面代码首先会把栈中HomeActivity之上的所有Activity移除出栈,然后接到广播finish自己。一切OK ! 没有弹框,不用考虑机型Rom适配。不会有内存问题。

    七、singletask简易版

    第五种注册广播的方式略显麻烦,有一种更简单的方式,思路也很简单,
    * 设置MainActivity的加载模式为singleTask
    * 重写MainActivity中的onNewIntent方法
    * 需要退出时在Intent中添加退出的tag

    //第一步,设置MainActivity的加载模式为singleTask
    android:launchMode="singleTask"
    
    //第二步,重写MainActivity的onNewIntent方法
        private static final String TAG_EXIT = "exit";
    
        @Override
        protected void onNewIntent(Intent intent) {
            super.onNewIntent(intent);
            if (intent != null) {
                boolean isExit = intent.getBooleanExtra(TAG_EXIT, false);
                if (isExit) {
                    this.finish();
                }
            }
        }
    
    
    //第三步,调用退出方法。
    /**退出程序*/
    protected void exit() {
        // 这里使用clear + new task的方式清空整个任务栈,只保留新打开的Main页面
        // 然后Main页面接收到退出的标志位exit=true,finish自己,这样就关闭了全部页面
        Intent intent = new Intent(this, MainActivity.class);
        intent.putExtra("exit", true);
        startActivity(intent);
    }
    

    八、懒人式

    这种方式更加简单,只需要如下两步操作
    1、将MainActivity设置为singleTask
    2、将退出出口放置在MainActivity
    我们可以看到很多应用都是双击两次home键退出应用,就是基于这样的方式来实现的,这里在贴一下如何处理连续两次点击退出的源码

    private boolean mIsExit;
    @Override
        /**
         * 双击返回键退出
         */
        public boolean onKeyDown(int keyCode, KeyEvent event) {
    
            if (keyCode == KeyEvent.KEYCODE_BACK) {
                if (mIsExit) {
                    this.finish();
    
                } else {
                    Toast.makeText(this, "再按一次退出", Toast.LENGTH_SHORT).show();
                    mIsExit = true;
                    new Handler().postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            mIsExit = false;
                        }
                    }, 2000);
                }
                return true;
            }
    
            return super.onKeyDown(keyCode, event);
        }
    

    九、退回系统桌面

    Android应用开发中,有一种场景,就是我们不希望用户直接按Back键退出Activity,而是希望应用隐藏到后台的假退出,类似于按Home键的效果。(例如QQ、微信等、音乐播放器类软件等)。

    • 方法一(java):
    /**退出程序**/
    protected void exit() {
        Intent startMain = new Intent(Intent.ACTION_MAIN);
        startMain.addCategory(Intent.CATEGORY_HOME);
        startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(startMain);
        System.exit(0);
    }
    
    • 方法二(xml):
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.xxx.xxx"   
        android:versionCode="1"
        android:versionName="1.0.1">
      <application>     
        <activity
            android:name="com.xxx.xxx.MainActivity"
            android:label="@string/app_name"
            android:launchMode="singleTask"
            android:clearTaskOnLaunch="true"
            android:stateNotNeeded="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.HOME" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity> 
       ...
      </application>
    </manifest>
    

    十、监听式

    从Android 4.0(API 14)开始,Application中多了一个可以设置全局监听Activity生命周期的方法:registerActivityLifecycleCallbacks(ActivityLifecycleCallbacks callback),其中传入的参数 ActivityLifecycleCallbacks能得到全局所有Activity生命周期的回调,所以我们可以从Application中全局监听所有Activity并对其进行管理。

    public class MyApplication extends Application {
        protected static Context context;   
    
        /**
         * 维护Activity 的list
         */
        private static List<Activity> mActivitys = Collections.synchronizedList(new LinkedList<Activity>());
    
        @Override
        public void onCreate() {
            super.onCreate();
            context = this.getApplicationContext();
            registerActivityListener();
        }
    
        public static Context getContext() {
            return context;
        }
    
        /**
         * @param activity 作用说明 :添加一个activity到管理里
         */
        public void pushActivity(Activity activity) {
            mActivitys.add(activity);
        }
    
        /**
         * @param activity 作用说明 :删除一个activity在管理里
         */
        public void popActivity(Activity activity) {
            mActivitys.remove(activity);
        }
    
        /**
         * get current Activity 获取当前Activity(栈中最后一个压入的)
         */
        public static Activity currentActivity() {
            if (mActivitys == null||mActivitys.isEmpty()) {
                return null;
            }
            Activity activity = mActivitys.get(mActivitys.size()-1);
            return activity;
        }
    
        /**
         * 结束当前Activity(栈中最后一个压入的)
         */
        public static void finishCurrentActivity() {
            if (mActivitys == null||mActivitys.isEmpty()) {
                return;
            }
            Activity activity = mActivitys.get(mActivitys.size()-1);
            finishActivity(activity);
        }
    
        /**
         * 结束指定的Activity
         */
        public static void finishActivity(Activity activity) {
            if (mActivitys == null||mActivitys.isEmpty()) {
                return;
            }
            if (activity != null) {
                mActivitys.remove(activity);
                activity.finish();
                activity = null;
            }
        }
    
        /**
         * 结束指定类名的Activity
         */
        public static void finishActivity(Class<?> cls) {
            if (mActivitys == null||mActivitys.isEmpty()) {
                return;
            }
            for (Activity activity : mActivitys) {
                if (activity.getClass().equals(cls)) {
                    finishActivity(activity);
                }
            }
        }
    
        /**
         * 按照指定类名找到activity
         *
         * @param cls
         * @return
         */
        public static Activity findActivity(Class<?> cls) {
            Activity targetActivity = null;
            if (mActivitys != null) {
                for (Activity activity : mActivitys) {
                    if (activity.getClass().equals(cls)) {
                        targetActivity = activity;
                        break;
                    }
                }
            }
            return targetActivity;
        }
    
        /**
         * @return 作用说明 :获取当前最顶部activity的实例
         */
        public Activity getTopActivity() {
            Activity mBaseActivity = null;
            synchronized (mActivitys) {
                final int size = mActivitys.size() - 1;
                if (size < 0) {
                    return null;
                }
                mBaseActivity = mActivitys.get(size);
            }
            return mBaseActivity;
    
        }
    
        /**
         * @return 作用说明 :获取当前最顶部的acitivity 名字
         */
        public String getTopActivityName() {
            Activity mBaseActivity = null;
            synchronized (mActivitys) {
                final int size = mActivitys.size() - 1;
                if (size < 0) {
                    return null;
                }
                mBaseActivity = mActivitys.get(size);
            }
            return mBaseActivity.getClass().getName();
        }
    
        /**
         * 结束所有Activity
         */
        public static void finishAllActivity() {
            if (mActivitys == null) {
                return;
            }
            for (Activity activity : mActivitys) {
                activity.finish();
            }
            mActivitys.clear();
        }
    
        /**
         * 退出应用程序
         */
        public  static void appExit() {
            try {
                finishAllActivity();
            } catch (Exception e) {
            }
        }
    
        private void registerActivityListener() {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
                registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
                    @Override
                    public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
                        /**
                         *  监听到 Activity创建事件 将该 Activity 加入list
                         */
                        pushActivity(activity);
                    }
    
                    @Override
                    public void onActivityStarted(Activity activity) {
    
                    }
    
                    @Override
                    public void onActivityResumed(Activity activity) {
    
                    }
    
                    @Override
                    public void onActivityPaused(Activity activity) {
    
                    }
    
                    @Override
                    public void onActivityStopped(Activity activity) {
    
                    }
    
                    @Override
                    public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
    
                    }
    
                    @Override
                    public void onActivityDestroyed(Activity activity) {
                        if (null==mActivitys||mActivitys.isEmpty()) {
                            return;
                        }
                        if (mActivitys.contains(activity)) {
                            /**
                             *  监听到 Activity销毁事件 将该Activity 从list中移除
                             */
                            popActivity(activity);
                        }
                    }
                });
            }
        }
    
    }
    

    十一、容器式升级版

    跟容器式思路一样,添加了软应用,解决内存泄露问题。

    import java.lang.ref.SoftReference;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map.Entry;
    
    import android.app.Activity;
    import android.content.Context;
    import android.content.Intent;
    import android.util.Log;
    
    public class ActivityManager {
    
        /**
         * 注意,此处为单例模式,在BaseActivity中,只会返回一个对象。否则,每次被继承的BaseActivity在子Activity被创建的时候,
         * 都会得到一个新的对象。每个新的对象下,又会创建自己的HashMap,效果就是,一个HashMap只存了一个activity,
         * 显然与我们想要的结果不一样。
         * 所以,必须使用单例模式
         */
        
        private static ActivityManager activityManager;
    
        public static ActivityManager getActivityManager() {
            if (activityManager == null) {
                activityManager = new ActivityManager();
            }
            return activityManager;
        }
    
        //此处,可有可无。
        private ActivityManager() {
        }
    
        /**
         * task map,用于记录activity栈,方便退出程序(这里为了不影响系统回收activity,所以用软引用)
         */
        private final HashMap<String, SoftReference<Activity>> taskMap = new HashMap<String, SoftReference<Activity>>();
    
        /**
         * 往应用task map加入activity
         */
        public final void putActivity(Activity atv) {
            taskMap.put(atv.toString(), new SoftReference<Activity>(atv));
            Log.i("PutActivity", "" + atv);
        }
    
        /**
         * 往应用task map加入activity
         */
        public final void removeActivity(Activity atv) {
            taskMap.remove(atv.toString());
        }
    
        /**
         * 清除应用的task栈,如果程序正常运行这会导致应用退回到桌面
         */
        public final void exit() {
            for (Iterator<Entry<String, SoftReference<Activity>>> iterator = taskMap
                    .entrySet().iterator(); iterator.hasNext();) {
                SoftReference<Activity> activityReference = iterator.next()
                        .getValue();
                Activity activity = activityReference.get();
                Log.i("ActivityList", "" + activity);
                if (activity != null) {
                    activity.finish();
                }
            }
            taskMap.clear();
        }
    
    }
    
    

    创建自己的根activity,重写onCreate与onDestory

    import android.app.Activity;
    import android.os.Bundle;
    
    public class BaseActivity extends Activity {
    
        private ActivityManager manager = ActivityManager.getActivityManager();
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            manager.putActivity(this);
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            manager.removeActivity(this);
        }
    
        public void exit() {
            manager.exit();
        }
    
    }
    

    以后创建的activity都继承这个根activity就可以了,调用exit()退出应用如下:

    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    
    public class FragmentsActivity extends BaseActivity {
        private Button exit;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_fragment);
    
            exit = (Button) findViewById(R.id.exit);
            exit.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View arg0) {
                    // TODO Auto-generated method stub
                    exit();
                }
            });
    
        }
    
    }
    

    总结

    以上即是Android中常用的退出应用的方法,还有一个抛异常来退出app的我就没有写了,因为那个实在不怎么的。这些方法各有利弊,有时间可以自己尝试下。

    展开全文
  • 退出vim_如何从Vim退出

    千次阅读 2020-10-08 12:03:33
    退出vimVim has different and alternative solutions for different requirements. In this tutorial, we will look at different ways to quit or exit and save and exit. In this tutorial, we will use quitand...
  • In this article you will learn how to exit ... 在本文中,您将学习如何在保存和不保存的情况下退出vim编辑器。 What is Vim? 什么是Vim? Vim is a text editor that is highly cofigurable and customizable...
  • 退出命令是,按ESC键 跳到命令模式,然后输入:q(不保存)或者:wq(保存) 退出。 更多退出命令: :w 保存文件但不退出vi :w file 将修改另外保存到file中,不退出vi :w! 强制保存,不推出vi :wq 保存文件并退出vi :...
  • 最近新接入了一个cas 客户端,发现退出一个客户端时,另一个客户端并没有退出 1、由于使用的services 配置json文件配置的方式,所以需要在文件中添加退出的url,用于cas 通知其他客户端的退出操作 { "@class" : ...
  • 这篇文章主要介绍了python子线程退出及线程退出控制的代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下 下面通过代码给大家介绍python子线程退出问题,具体内容如下所示: def thread_func(): while ...
  • linux 退出

    千次阅读 2019-06-10 21:51:48
    在linux家族中,vim编辑器是系统... 偶有小白,刚接触linux,要修改某个文本文件,不可能像WINDOWS那样操作,更有甚者,进入VI编辑器后,无法退出以致强抽关机,确是不得以呀。 其实,这个VIM(VI)也是很简...
  • linux 进程退出5种方式

    千次阅读 2020-07-05 19:05:59
    linux系统编程之进程(四):进程退出exit,_exit区别即atexit函数 一,进程终止有5种方式: 正常退出: 从main函数返回 调用exit 调用_exit 异常退出: 调用abort 由信号终止 二,exit和_exit区别: ...
  • java退出程序

    千次阅读 2018-12-24 21:45:49
    是一个javaweb项目,根据客户服务器的mac地址,公司名称以及使用期限做一个限制性的功能;...最后是一个同事提醒,java有个函数是可以退出程序的 System.exit(0); 弄了一天的功能,就这样一行代码给解决了
  • spring-security退出登陆

    千次阅读 2019-09-22 11:20:38
    1 spring-security默认退出处理逻辑 2 自定义退出登陆的一些处理逻辑 3 测试 3.1 yml未指定signOutUrl 3.2 yml里指定了signOutUrl为/nrsc-logout.html 3.3 清除当前用户的remember-me记录相关功能测试 项目源码地址...
  • QThread线程的运行和退出

    万次阅读 2019-10-21 21:40:13
    关于QT退出线程,一直迷迷糊糊的,凑活着能用就行,出了问题总觉得莫名其妙,现在静下心来总结一下。 感谢 QThread的用法:开启与退出 Qt QThread 这是我 见过解析最全面的一片文章 线程运行有两种方式 #...
  • 退出beeline

    千次阅读 2020-03-29 14:44:24
    !quit
  • PHP实现退出登录功能

    千次阅读 2020-02-09 10:25:16
    在PHP程序中,登录完成之后将存入session中,退出登录时,需要释放session,相应的代码如下所示。 <?php session_start(); if(isset($_SESSION["uid"])) // 检测变量是否设置 { session_unset(); // 释放当前在...
  • 启动和退出hive

    千次阅读 2019-12-08 19:12:49
    一、启动hive hive (在hive的bin目录下执行) ...二、退出hive (1)quit退出hive,推荐 hive>quit; (2)exit退出hive hive> exit; (exit会影响之前的使用,需要下一句kill掉hadoo...
  • 回看 Run 面板中的输出信息,唯一让我感到疑惑的就是下面这行: 进程已结束,退出代码-1073741819 (0xC0000005) 正常来说,程序执行的输出结果如下所示: 进程已结束,退出代码0 退出代码是 0,表示程序正常结束;...
  • 我国农村宅基地有偿退出机制构建研究【摘要】随着城镇化与工业化的不断发展,现行农村宅基地制度不能满足用地需求,并导致了大量土地资源的浪费,因此构建宅基地有偿退出制度是大势所趋。本文在明确农村宅基地、农村...
  • ## 前辈们,如何实现关闭浏览器就能执行退出登录 下面是关闭页面会执行方法,但我想要的是关闭浏览器 ``` ()"> function delSession() { alert("下面的ajax有运行无法弹出窗口"); $.ajax({ ...
  • VC6.0在64位Windows7下调试的时候,直接结束调试时,程序无法退出,这个插件可以帮助在win764位调试时直接结束调试退出程序。
  • C# Winform退出程序的方法介绍

    万次阅读 多人点赞 2019-06-04 12:13:25
    这篇文章主要介绍了C#中WinForm程序退出方法, 实例总结了技巧退出WinForm程序窗口的各种常用技巧,非常具有实用价值,需要的朋友可以参考下 本文实例总结了C#中WinForm程序退出方法技巧。分享给大家供大家参考。具体...
  • vim编辑器如何退出

    千次阅读 2021-07-12 16:28:12
    :q即可退出vim编辑器; :q!(强制退出不保存); :wq(保存后退出); :wq!(强制保存后退出)。
  • Flash将在2020年12月31日退出历史舞台

    万次阅读 多人点赞 2020-12-15 08:42:11
    该 Flash 格式已经经历了二十年,该技术最终将在几周后退出支持,即 2020 年 12 月 31 日。 今天 Adobe 发布了他们最后的 Flash Player 更新公告。 2020 年 12 月 8 日 Flash 更新公告 “今天是 Flash Player 在中国...
  • 在 Linux 中使用 vim 时,输入 vim xxx.file 输入好文件内容之后,怎么保存呢?...:w 保存但不退出 :wq 保存并退出 :q 退出 :q! 强制退出,不保存 :e! 放弃所有修改,从上次保存文件开始再编辑命令历史 ...
  • 关于app退出的问题,完美退出方式

    万次阅读 2017-06-20 09:43:43
    实际开发中会有很多关于app的退出问题,我个人比较常见的有两种: 一、双击退出 比如说我们在首页的时候需要一个双击退出的方法,点击第一次手机的返回键时提示:“再点一次退出应用”。之类的话语,我们可以这样...
  • vue项目 退出登录

    千次阅读 2019-09-04 14:16:03
    **退出登录怎么写?**如下, 显示部分 退出登录按钮(引用了svg格式的icon) <van-cell title="退出登录" @click="loginout"> <div slot="icon"> <svg class="iconLeft" aria-hidden="true"> <...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,112,240
精华内容 844,896
关键字:

退出