Joyce_ZhuRouRou 2013-01-22 05:48 采纳率: 0%
浏览 4697
已采纳

应用在屏幕锁屏后再无响应

最近做一个应用,log一直在打印

GC_CONCURRENT freed 433k,7% free 7975K/8564K,paused 12ms+4ms, total 70ms

类似这样的信息。
这个应用在一直使用的情况下是没有问题的,可是锁屏大概1分钟之后再回来,一种情况是应用直接没有响应了,另一种情况是等很久(大概10秒左右)又能响应,等它能响应回来后,又可以正常工作了。
真是不知道是怎么回事,从log信息看到虽然UI上面没有响应,可是后台的service还在正常工作的。
是内存泄露吗?因为从上面的GC_CONCURRENT看出,我只有7%的内存是free的,还是什么别的原因引起的?
另外还有一个问题,就是我用一个继承Application的类来管理activity的退出,在点击退出按键的时候调用

public void exit() {
    Log.e(TAG, "exit in myapplication");
    for (Activity activity : activityList) {
        Log.e(TAG, activity.getLocalClassName()+ " finish");
        activity.finish();
    }
    System.exit(0);
}

这个函数,可是发现执行finish()方法后activity的onDestroy方法并没有被调用,这是怎么回事啊?

  • 写回答

2条回答

  • loFataMer 2013-01-22 06:54
    关注

    你的应用锁屏后无响应是内存泄漏造成的。

    锁屏之后不代表应用退出了,一般在锁屏时将应用设置为后台运行会更好,试试saveInstanceStateonPause

    对于android来说一般不鼓励应用退出,这和手机型号也有一些关系。

    补充:

    重写onSaveInstanceState,(savedInstanceState包),然后设置需要的应用状态参数值。

    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
      super.onSaveInstanceState(savedInstanceState);
      // Save UI state changes to the savedInstanceState.
      // This bundle will be passed to onCreate if the process is
      // killed and restarted.
      savedInstanceState.putBoolean("MyBoolean", true);
      savedInstanceState.putDouble("myDouble", 1.9);
      savedInstanceState.putInt("MyInt", 1);
      savedInstanceState.putString("MyString", "Welcome back to Android");
      // etc.
    
    }
    

    包本质上一个存储NVP(属性名-值对应)的方法地图,并且会传递到你提取值的onCreateonRestoreInstanceState

    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState) {
      super.onRestoreInstanceState(savedInstanceState);
      // Restore UI state from the savedInstanceState.
      // This bundle has also been passed to onCreate.
      boolean myBoolean = savedInstanceState.getBoolean("MyBoolean");
      double myDouble = savedInstanceState.getDouble("myDouble");
      int myInt = savedInstanceState.getInt("MyInt");
      String myString = savedInstanceState.getString("MyString");
    }
    

    这种方法也可以用到存储应用实例值上面,比如未保存的文本。


    看看这个链接:SavingPersistentState

    两个方法的文档说明链接:
    onCreate

    onSaveInstanceState

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用