zoukankan      html  css  js  c++  java
  • 2016年3月11日Android实习日记

    1.明天删除orthodotics_design_animation_content_gif.gif文件。(已完成)

    2. 如何检测内存泄露? 

    A: 可以通过一些性能监测分析工具,如 JProfiler、Optimizeit Profiler,MAT工具。

     MAT工具参考http://blog.csdn.net/fenglibing/article/details/6298326

    Q: 如何避免内存泄露、溢出?
    A: 1) 尽早释放无用对象的引用。

    好的办法是使用临时变量的时候,让引用变量在退出活动域后自动设置为null,暗示垃圾收集器来收集该对象,防止发生内存泄露。

    2) 程序进行字符串处理时,尽量避免使用String,而应使用StringBuffer。

    因为每一个String对象都会独立占用内存一块区域,如: 

    Java代码

    String str = "aaa";
    String str2 = "bbb";
    String str3 = str str2;
    // 假如执行此次之后str , str2再不被调用,那么它们就会在内存中等待GC回收;
    // 假如程序中存在过多的类似情况就会出现内存错误;
    String str = "aaa";String str2 = "bbb"; String str3 = str str2; // 假如执行此次之后str , str2再不被调用,那么它们就会在内存中等待GC回收; // 假如程序中存在过多的类似情况就会出现内存错误;

    3) 尽量少用静态变量。

    因为静态变量是全局的,GC不会回收。

    4) 避免集中创建对象尤其是大对象,如果可以的话尽量使用流操作。

    JVM会突然需要大量内存,这时会触发GC优化系统内存环境;

    JVM会突然需要大量内存,这时会触发GC优化系统内存环境; 一个案例如下:

          Java代码:

    // 使用jspsmartUpload作文件上传,运行过程中经常出现java.outofMemoryError的错误,
    // 检查之后发现问题:组件里的代码
    m_totalBytes = m_request.getContentLength();
    m_binArray = new byte[m_totalBytes];
    // totalBytes这个变量得到的数极大,导致该数组分配了很多内存空间,而且该数组不能及时释放。
    // 解决办法只能换一种更合适的办法,至少是不会引发outofMemoryError的方式解决。
    // 参考:http://bbs.xml.org.cn/blog/more.asp?name=hongrui&id=3747
    // 使用jspsmartUpload作文件上传,运行过程中经常出现java.outofMemoryError的错误, // 检查之后发现问题:组件里的代码 m_totalBytes = m_request.getContentLength(); m_binArray = newbyte[m_totalBytes]; // totalBytes这个变量得到的数极大,导致该数组分配了很多内存空间,而且该数组不能及时释放。 // 解决办法只能换一种更合适的办法,至少是不会引发outofMemoryError的方式解决。 // 参考:http://bbs.xml.org.cn/blog/more.asp?name=hongrui&id=3747

      

    5) 尽量运用对象池技术以提高系统性能。

    生命周期长的对象拥有生命周期短的对象时容易引发内存泄漏,例如大集合对象拥有大数据量的业务对象的时候,可以考虑分块进行处理,然后解决一块释放一块的策略。

    6) 不要在经常调用的方法中创建对象,尤其是忌讳在循环中创建对象。

    可以适当的使用hashtable,vector 创建一组对象容器,然后从容器中去取那些对象,而不用每次new之后又丢弃。

    7) 优化配置。

    参考:http://blog.csdn.net/wisgood/article/details/16818243

    另外参考:http://blog.csdn.net/seelye/article/details/8269705

    3.android Handler应设为static,android开发中,使用Lint检测时会提示这么一句话 : This Handler class should be static or leaks might occur。参考:http://blog.csdn.net/jdsjlzx/article/details/8463428

    4. linearlayout中如何让某个控件,位于整个屏幕正中央。参考:http://www.eoeandroid.com/thread-321860-1-1.html?_dsign=4c07eb92

    我的程序代码:

    <!-- 网络连接提示信息 -->
        <LinearLayout
            android:id="@+id/before_connect_server"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:layout_marginBottom="50dp"
            android:gravity="center">
    
                    <ProgressBar
                        style="@android:style/Widget.ProgressBar.Large"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        />
    
                    <TextView
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:text="正在加载试题,请稍后..."
                        android:textSize="17sp"
                        android:gravity="center"
                        android:layout_marginTop="20dp"
                        android:textColor="#666666"/>
    
    
        </LinearLayout>
    

      

    5.

    //加载好试题之前,先隐藏内容界面
    mSv.setVisibility(View.GONE);而不是
    mSv.setVisibility(View.INVISIBLE);

    6.

    线程中加入showToast("未连接网络", 200);出错,直接跳出。
    //mServerConnectStateHandler.sendEmptyMessage(MsgWhat.CONNECT_SERVER_FAIL);
    //Toast.makeText(getApplicationContext(), "连接失败", 200).show();
    原因:线程中不能更新UI相关元素,应使用handler。
    anroid 线程不安全 需要用handler 不然你run里面的貌似不能执行。

    7.

     

  • 相关阅读:
    [UVa514] Rails
    今日才真正懂了BFS
    [UVa11292] Dragon of Loowater
    [UVa] TEX Quotes
    白书杂七杂八
    [OpenJudge] Feed_Accounting
    [OpenJudge] Jolly_Jumpers
    Restart
    Collection of Websites
    Oracle11完全卸载方法
  • 原文地址:https://www.cnblogs.com/hsqdboke/p/5263713.html
Copyright © 2011-2022 走看看