精华内容
下载资源
问答
  • 如果你的应用并不是必须存在的,不要捕获这个异常,直接退出吧。...嘿嘿可以预先保留一部分内存空间,在内存不足的时候用这部分内存。或者在分配堆栈的时候保留足够的内存。或者在异常的时候停止不那么关键的
    如果你的应用并不是必须存在的,不要捕获这个异常,直接退出吧。
    如果有些对用户来说比较重要的数据,可以尝试在退出前保存一下。
    如果数据非常重要,最好还是周期性的保存比较好。

    手机都可以死机,程序退出并不是什么大不了的。

    如果你的应用实在太关键了,比如没有这个程序用户就活不了...嘿嘿
    可以预先保留一部分内存空间,在内存不足的时候用这部分内存。或者
    在分配堆栈的时候保留足够的内存。或者在异常的时候停止不那么关键
    的任务,释放不那么重要的对象,只要留下来能让用户活着的 ok 了...

     

     

     

    2nd 会直接退出,你就不需要操心了。 3rd 会吞掉这个错误,
    似乎会谈一个对话框报告错误。但是我对 3rd 这个框架有点儿
    意见,呵呵。这可能把应用逻辑搞坏掉。

    比如程序正在执行某个操作,设置一个系统状态,等操作完成后清
    除这个状态。但是操作过程中leave了,于是系统状态没有恢复,
    leave 又被框架吞掉了。最后程序看起来没有死,但是却不能正
    常工作。这还不如退出好。

    对于这种情况只能自己TRAP,判断错误原因。对于能处理的,比如
    程序设定的一些错误,恢复系统状态,提醒用户或者继续后续操作。
    对于不能处理的错误,还是直接调用 panic 退了吧

    这时候调用 UI 的 HandleCommand(EEikCmdExit)不太好,
    这是正常的退出方式。异常就要有异常的退出方法,呵呵。

    活动对象 RunL 里如果 leave 的话,会进入 RunError,这
    个时候有机会恢复系统状态。如果错误不能处理,也应该 panic。

    不过 leave 导致程序逻辑错误的情况只是一部分,如果没有这种
    可能的话,就让系统框架处理吧。


    by mayflowers
     
     
     
     
    Symbian提供了new(ELeave)操作保证创建对象要么成功要么失败,如果失败就会抛出leave,应用程序的框架会捕捉进行处理,自己也可通过TRAP或TRAPD处理.使用它的好处就是不需要自己在后面判断是申请是否成功.


    Beover1984
     
     
    做终端有个好处, 多数操作都是有用户出发的, 那么没内存了, leave, 网络操作失败了, leave, 没有存储空间了, leave, 交由symbian应用程序框架处理, 或者有好点, 自己在逻辑顶层捕获一下, 给用户个有好点的提示就行了, 用户决定是重试还是什么的, 不向后台业务, 必须向办法处理, 用户关闭其它应用, 释放磁盘空间,或者出了电梯重试一下, 就好了, 不用程序多做工作



    qxiaoyuan
    展开全文
  • 那些64G用户从来都体会不到小内存用户内心的痛,动不动就提示手机内存不足,到底该咋整呢?小编马上教你如何让小内存变成大内存。 一、处理手机的基础数据 1.照片的备份与删除 小内存,还爱拍照,那就不得了了!...
    那些64G用户从来都体会不到小内存用户内心的痛,动不动就提示手机内存不足,到底该咋整呢?小编马上教你如何让小内存变成大内存。

    一、处理手机的基础数据

    1.照片的备份与删除

    小内存,还爱拍照,那就不得了了!我们必须要把你手机里的四万万张照片进行备份,然后再删除手机中的照片。
    我们可以在电脑运行iTunes,然后连接手机到电脑,单击“立即备份”就可以了。
     
    如果你懒得用电脑,那你也可以用iCloud备份手机的照片,直接按照“设置--登录Apple ID--iCloud--开启备份照片”进行操作即可。
     
    备份完成后,我们就可以把不必要的手机照片全部删除,进入相簿后,单击“选择”,选中照片后进行删除。
     

    2.短信的自动删除

    像小编这种网购狂魔,每天都要收到来自淘宝天猫各大店主的短信骚扰,防不胜防!
     
    我们可以在iPhone中设置手机自动删除短信,既省了你删除的功夫,又可以节省内存!进入“设置”后,单击“信息”,然后在保留信息选项选择“30天”。
     

    3.调整相机的分辨率

    你平时用iPhone拍视频的时候是不是从来没有注意过分辨率的问题呢?虽然分辨率越高,照片越清晰。但是,分辨率高的照片和视频,同样会占据更多的内存,仅作一般用途的话,其实720P就够够的了!
    直接在“设置”中选择“照片与相机”,然后选择视频的分辨率。
     

    二、处理手机的应用数据

    1.微信记录的备份与清除

    微信绝对是你内存不足的罪魁祸首!如果按照应用程序占据手机内存的容量从大到小进行排名,微信绝对你高居榜首,就像这样:
     
    所以我们要先把微信的聊天记录迁移到另一部手机中。打开微信,按照“我--设置--通用--聊天记录迁移”进入聊天列表,选择记录后进行迁移即可。
     
    或者,你也可以下载一个电脑版的微信,对聊天记录进行备份。运行软件后扫描登录账号,单击“设置”中的“聊天记录备份”,然后连接iPhone到电脑,选择需要备份的记录开始备份。
     
    注:如果因为网络不稳定,在备份的过程中发生记录丢失,我们也可以采用强力苹果恢复精灵进行恢复。
     
    最后,微信备份完毕后,我们就可以在微信的“通用”界面清空微信聊天记录了。
     

    2.卸载不常用的APP

    对于那些占着茅坑不拉屎的APP,我们就要像秋风扫落叶一般残酷无情,把它们找出来后统统删除!
    通过“设置--通用--存储空间与iCloud用量--管理存储空间”进入相应界面,找出不常用的APP,点开后单击“删除应用”。
     

    3.在线听歌省内存

    在这个wifi遍布的社会,我们就不要在手机里下载那么多的歌曲了,直接在线听歌就好,反正网上的歌又跑不掉!而且在线听歌还免费哦!

     
    做完上述步骤,小编保证你的小内存绝对又能活蹦乱跳地苟延残喘了!如果还是不行,那就洗洗睡吧,明天再买台iPhone8!

    展开全文
  • 如何管理数据垃圾

    2020-12-07 11:15:59
    不知不觉,我们的手机内存不够用、空间不够用,个人电脑内存不够用、cpu占用更高、硬盘空间不足。逼迫我们每隔一段时间都需要更换个人设备。 简单的个人设备更换带来小的损失。大到公共服务,后台服务,每天大量的...

    信息爆炸时代,人人都是数据的生产者,数据的产生占用大量设备资源。大到后台存储、网络传输,小到个人的手机、笔记本。数据时时刻刻都在产生,看见的、看不见的。不知不觉,我们的手机内存不够用、空间不够用,个人电脑内存不够用、cpu占用更高、硬盘空间不足。逼迫我们每隔一段时间都需要更换个人设备。 简单的个人设备更换带来小的损失。大到公共服务,后台服务,每天大量的后台运行,不仅占用了存储的空间,还占用了传输的空间、占用了计算资源。因此一些垃圾信息侵蚀着我们资源,如何进行处理?
    生活中产生的垃圾依靠自然环境自我分解,可以循环利用。还有一些垃圾通过人工进行分拣处理,进行二次利用,消除垃圾。网络世界中的信息垃圾如何处理。好的处理可能, 进行存储转移。有些欠妥的处理,发个公告,截至日期已过,全部销毁。一些软件目前都不是真删除,微信、QQ聊天信息的删除,占用空间越来越多。没有发现很好的清理工具。如何清理信息垃圾、提供资源的硬件资源的利用率。

    展开全文
  • 作为一名Android开发师,肯定在...一般这种情况下都很容易出现手机内存不足的情况,内存不足就会可能被干掉。这种时候用户切换到app准备继续操作时,如果开发师处理不好,就会引起崩溃的情况,肯定会出现返回的时...


    作为一名Android开发师,肯定在处理用户的体验上下一定的功夫。有这么一个场景,在用户用着你开发的app的时候,突然某个聊天工具来消息了,切换到聊天工具后长时间停留,并且可能做了一些你不知道的操作,比如看视频阿,刷刷消息圈什么的。一般这种情况下都很容易出现手机内存不足的情况,内存不足就会可能被干掉。这种时候用户切换到app准备继续操作时,如果开发师处理不好,就会引起崩溃的情况,肯定会出现返回的时候一瞬间的白屏,对于用户体验的来说,非常不好。 

    开始

    首先要介绍下Android中activity的四种启动模式(就当作复习一下旧知识吧,资料来源于网络总结):

    Standard:是默认的也是标准的Task模式,在没有其他因素的影响下,使用此模式的Activity,会构造一个Activity的实例,加入到调用者的Task栈中去,对于使用频度一般开销一般什么都一般的Activity而言,standard模式无疑是最合适的,因为它逻辑简单条理清晰,所以是默认的选择。

    singleTop:基本上于standard一致,仅在请求的Activity正好位于栈顶时,有所区别。此时,配置成singleTop的Activity,不再会构造新的实例加入到Task栈中,而是将新来的Intent发送到栈顶Activity中,栈顶的Activity可以通过重载onNewIntent来处理新的Intent(当然,也可以无视...)。这个模式,降低了位于栈顶时的一些重复开销,更避免了一些奇异的行为(想象一下,如果在栈顶连续几个都是同样的Activity,再一级级退出的时候,这是怎么样的用户体验...),很适合一些会有更新的列表Activity展示。一个活生生的实例是,在Android默认提供的应用中,浏览器(Browser)的书签Activity(BrowserBookmarkPage),就用的是singleTop。

    singleTask:配置了这个属性的activity,最多仅有一个实例存在,而且,它在根的task中,在之后的被杀死重启的过程中我们会利用到这个配置,也就是我们的主界面MainActivity。

    singleInstance:跟上面的singleTask基本上是一样的,但是,singleInstance的Activity,是它所在栈中仅有的一个Activity,如果涉及到的其他Activity,都移交到其他Task中进行,在实际开发中这个是用得比较少的。

    这个是activity的生命周期:



    就不多介绍这个生命周期了,相信都熟悉不过了,有想了解的自行Google或者百度吧。


    重点

    接下来是我们的重点:程序如果在后台被杀死之后,我们怎么去处理?是立刻恢复还是重新启动?哪个方法更适合我们?

    首先,我们得知道,为什么程序会在后台被干掉的?我们又没有手动关闭程序。

    app在后台被强杀,是在内存不足的情况下被强制释放了,也有一些恶心的rom会强制杀掉那些后台进程以释放缓存以提高所谓的用户体验。(注:当你的代码写得混乱、冗余,而且非常消耗内存的时候,那你的app在后台运行时将会比较容易被系统给干掉的,所以从现在开始要约束自己要养成良好的编码习惯和注意内存泄漏的问题)

    我们都觉得android rom很恶心,但同时还是用些更恶心的手法去绕开这些瓶颈。乱,是因为在最上层没有一个很好的约束,这也是开源的弊端。anyway。我们还是得想破脑袋来解决这些问题,否则饭碗就没了。

    我们现在来重现这个熟悉的一幕:

    假设:App A -> B -> C

    在C activity中点Home键后台运行,打开ddms,选中该App进程,强杀。

    然后从“最近打开的应用”中选中该App,回到的界面是C activity,假设App中没有静态变量,这个时候是不会crash的,点击返回到B,这个时候也只是短暂白屏后显示B界面。但如果B中有引用静态变量,并想要获取静态变量中的某个值时,就NullPointer了。

    以上复现的流程就几个点,我们展开说下:

    当应用被强杀,整个App进程都是被杀掉了,所有变量全都被清空了。包括Application实例。更别提那些静态变量了。

    虽然变量被清空了,但Android给了一些补救措施。activity栈没有被清空,也就是说A -> B -> C这个栈还保存了,只是ABC这几个activity实例没有了。所以回到App时,显示的还是C页面。另外当activity被强杀时,系统会调用onSaveInstance去让你保存一些变量,但我个人觉得面对海量的静态变量,这个根本不够用。返回到B会白屏,是因为B要重绘,重走onCreate流程,渲染上需要点时间,所以会白屏了。

    大概是以上这些点。如果App中没有静态变量的引用,那就不用出现NullPointer这个crash,也就不需要解决。一旦你有静态变量,或者有些Application的全局变量,那就很危险了。比如登录状态,user profile等等。这些值都是空了。

    肯定会有人说,这没关系啊,所有的静态变量都改到单例去不就好了吗?然后附加上一些持久化cache,空了再取缓存就ok了嘛。嗯,这肯定也是一个办法,但是这样的束手束脚对开发来说也是痛苦,至少需要多50%的编码时间才能全部cover。另外,还有那么多帮你挖坑的队友,难省心啊。

    既然App都被强杀了,干嘛不重新走第一次启动的流程呢,别让App回到D而是启动A,这样所有的变量都是按正常的流程去初始化,也就不会空指针了,对吧?有人说这方案用户体验一点都不好呀。但哪有十全十美的事呢,是重走流程好,还是一点一个NullPointer好?好好去沟通,相信产品也不会为难你的。当然你也可以拿来举例,iOS在最近打开的应用里杀了某个App,重新点击那个App,还是会重走流程的啊。

    如果你说用户已经打开了C界面,所以重新打开的是是恢复到C界面,这样的用户体验会更好啊,如果你是这样认为的,那你很多时间都是在防止恢复的时候不让你的app crash了,与其这样,还不如让整个app重新走整个流程呢,这样更省时间,而且这样也不用担心随时都会崩溃的情况,难道这样的用户体验不会更好吗?

    那且想想如何让它不回到C而是重走流程呢?也就是说中断C的初始化而回到A,并且按back键,不会回到C,B。考虑一下。

    我们先实例化这个场景吧。
    A为App的启动页
    B为首页
    C为二级页面

    把首页launchMode设置为singleTask,具体为什么上面介绍activity的启动模式的时候已经介绍了singleTask的作用了。

    在BaseActivity中onCreate中判断App是否被强杀,强杀就不往下走,直接重走App流程。

    首页起一个承接或者中转的作用,所有跨级跳转都需要通过首页来完成。

    再给个提示,以上场景的解决方案也可以用于解决其它相关问题:
    在任意页面退出App
    在任意页面返回到首页
    其实最重要的知识点就是launchMode

    具体实现

    AppStatusConstant

    public static final intSTATUS_FORCE_KILLED = -1;//应用放在后台被强杀了
    public static final intSTATUS_NORMAL = 2; //APP正常态//intent到MainActivity区分跳转目的
    public static finalStringKEY_HOME_ACTION = "key_home_action";//返回到主页面
    public static final intACTION_BACK_TO_HOME = 0;//默认值
    public static final intACTION_RESTART_APP = 1;//被强杀
    

    AppStatusManager

    public intappStatus= AppStatusConstant.STATUS_FORCE_KILLED; //APP状态初始值为没启动不在前台状态
    public staticAppStatusManagerappStatusManager;
    privateAppStatusManager() {
    }
    public staticAppStatusManagergetInstance() {
        if(appStatusManager==null{
            appStatusManager=newAppStatusManager();
        }
        returnappStatusManager;
    }
    public intgetAppStatus() {
        returnappStatus;
    }
    public voidsetAppStatus(intappStatus) {
        this.appStatus= appStatus;
    }
    

    BaseActivity(大致内容)

    switch(AppStatusManager.getInstance().getAppStatus()) {
    caseAppStatusConstant.STATUS_FORCE_KILLED:
        restartApp();
        break;
    caseAppStatusConstant.STATUS_NORMAL:
        setUpViewAndData();
        break;
    }
    protected abstract voidsetUpViewAndData();
    protected voidrestartApp() {
        Intent intent =newIntent(this,MainActivity.class);
        intent.putExtra(AppStatusConstant.KEY_HOME_ACTION,AppStatusConstant.ACTION_RESTART_APP);
        startActivity(intent);
    }
    
    每一个继承于父activity的都不要在oncreat中实现界面初始化和数据的初始化,因为如果被杀死之后,回来会走一次正常的生命流程的。

    StartPageActivity配置(在oncreat()方法配置,并且在super()前):

    AppStatusManager.getInstance().setAppStatus(AppStatusConstant.STATUS_NORMAL);//进入应用初始化设置成未登录状态
    

    MainActivity(配置了singleTask的主界面)

    @Override
    protected voidrestartApp() {
        Toast.makeText(getApplicationContext(),"应用被回收重启",Toast.LENGTH_LONG).show();
        startActivity(newIntent(this,StartPageActivity.class));
        finish();
    }
    @Override
    protected voidonNewIntent(Intent intent) {
        super.onNewIntent(intent);
        intaction = intent.getIntExtra(AppStatusConstant.KEY_HOME_ACTION,AppStatusConstant.ACTION_BACK_TO_HOME);
        switch(action) {
        caseAppStatusConstant.ACTION_RESTART_APP:
            restartApp();
            break;
        }
    }
    

    当应用打开的时候,启动StartPageActivity,然后设置app的status为normal状态,记住,一定要设置,因为默认的是被杀死的状态的。

    当应用被杀死之后,所有数据都会被回收,所以之前设置的app status也会置于默认状态,即杀死状态,所以再次打开app的时候,status为杀死状态,就会走重启的流程,这里为什么要先跳转到MainActivity呢?就是因为MainActivity配置为了Sing了Task,当跳转到这个界面时,MainActivity就会置于Activity Task的最上层,其他的Activity将会被默认销毁掉,利用这种技巧去销毁其他的Activity,最后才是重新启动StartPageActivity。整个流程就是这样了。

    大致的实现就如上所述了,我所倡导的宗旨就是花最少的时间,写最好的代码,实现最好的体验!之前也参考过很多网上大神们的实现方式,但是我觉得以上实现的应该是比较完整的一种了。


    此文思路借鉴于Me豪。


    展开全文
  •  应用该如何处理收到的私密消息 87 程序异常处理 88  程序异常意识 88  内存没释放 88  内存不足的异常 88  用户强制关闭应用的异常(AVK_END) 88  资源数据错误的异常 88  用户数据错误的异常 89 ...
  •  应用该如何处理收到的私密消息 87 程序异常处理 88  程序异常意识 88  内存没释放 88  内存不足的异常 88  用户强制关闭应用的异常(AVK_END) 88  资源数据错误的异常 88  用户数据错误的异常 89 ...
  • 比如,跳转页面需要登陆状态如何拦截,跳转页面传递参数该怎么办,程序意外跳转异常或者失败又该如何处理? 使用Arouter注意事项有哪些?如何让代码变得更加容易让人维护? 直接看我这篇博客:...
  • Android 一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导开发 IOS 由苹果公司开发的移动操作系统 Webkit 一个开源的浏览器引擎,在手机上的...
  • java源码包---java 源码 大量 实例

    千次下载 热门讨论 2013-04-18 23:15:26
     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
  • Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
  • 共享内存无法正常释放的处理 34 LOG_BUFFER设置与变迁 35 LOGMNR简单而强大的工具 36 从数据字典中获得更多知识 38 Yangtingkun的DBA工作手记(作者:杨廷琨) 45 利用SQL解释一个魔术 46 ORA-600(17069)错误...
  • java源码包2

    千次下载 热门讨论 2013-04-20 11:28:17
     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
  • java源码包3

    千次下载 热门讨论 2013-04-20 11:30:13
     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
  • java源码包4

    千次下载 热门讨论 2013-04-20 11:31:44
     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
  • Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、...
  • Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、...
  • 大话数据结构

    2018-12-14 16:02:18
    因为美国的黑夜就是中国的白天,利用互联网,他的员工白天上班就可以监控到美国仓库夜间的实际情况,如果发生了像火灾、偷盗这样的突发事件,及时电话到美国当地相关人员处理 7.4.1邻接矩阵 224 7.4.2邻接表 228 ...
  • 注:①测试使用小米9手机,单表数据量从最小100条到最大200W条,字段为30个String+一个自增ID,每个字符串长度都在20到30长度的随机字符,测试过程没有严格做到控制变量法,所以测试并不是很严谨,仅供参考;...
  • 软件工程教程

    热门讨论 2012-07-06 23:10:29
    在较大的公司,为自有品牌或者其他品牌设计手机或者平板电脑的总体方案。 根据需求对系统进行定制外,为系统编写定制的应用。 第二类开发者 在创业型公司或者是独立开发者,盈利方式主要2种: 为国外公司外包开发,...

空空如也

空空如也

1 2
收藏数 23
精华内容 9
关键字:

手机内存不足如何处理