首页 > 编程技术 > android

智能手机内存空间不足问题的解决办法

发布时间:2016-9-20 19:59

智能手机像电脑一样可以安装大量的应用软件与游戏,这样因为手机空间没有电脑空间大并且智能手机也会产生缓存,这样久了缓存不清除手机就越用越慢了,下面我们来看看常用解决智能手机内存空间不足的方法。

空间不足怎么办

1.系统提示内存空间不足了之后,卸载程序也不会增加多少可用空间,仍然会提示系统内存不足,亲测通过格式化手机可以解决,也就是恢复出厂设置(恢复出厂设置会把所有应用都卸载回到最初界面)。当然这个方法也会让你安装的APP都丢失,如果没必要刷机就再看看下面的。

2.打开RE文件浏览器,将/data/dalvik-cache 这个文件夹里面的都是系统缓存文件和卸载定制程序留下来的无用垃圾,可以放心全部删除,系统所需文件重启后能自动生成的,删除后可以感觉到系统内存明显提升,RAM内存释放,重启期间等待时间一到两分钟,期间不要有任何操作。小编实测有效,不过发现锁屏变成默认的

3.我们需要用到RE管理器进行删除(需要root权限)。

1、打开RE管理器(第一次打开RE管理器时,系统会弹出窗口询问你是否允许re管理器获取root权限,点击允许即可)

2、打开RE管理器后,点击右上角”挂载读写“的按钮;

3、进入data/app文件夹,找到该目录下的后缀为odex的文件,删除即可!

4、删除之后,再次安装就不会再出现“存储空间不足”了!不信你试试!

安卓教程:使用RE管理器解决“存储空间不足” - 解决安装特定应用出现的“存储空间不足”问题-7

安卓教程:使用RE管理器解决“存储空间不足” - 解决安装特定应用出现的“存储空间不足”问题-5

4.移动APP到SD卡,这个方法有一定的局限性,当效果不错,部分手机不支持者这样的功能

5.使用容量较小的主题包,由于使用的主题都是要求放置在机身内存中的,所以使用小容量的主题包也能很有效的减少内存占用。

内存不足怎么办

1、系统提示内存不足解决办法一,可以删除一些不用的程序但这样空间不会有多大的提升,我们可以恢复出厂设置也就是大家讲的格机了:

2、在手机中安装RE文件器,然后进入你手机的/data/dalvik-cache 这里面是你手机应用程序所产生的临时文件与缓存文件了,清除这里不要的文件可解决此问题。

3、把一些不要的系统文件删除,但是删除后第一次重启机器会比较慢,大概2分钟才可启动

智能手机与电脑类似,在使用一段时间,安装了大量的运用软件并存储了大量的资料之后,系统速度可能会变得缓慢,再加上一些恶意软件的存在,这些都有可能对系统的稳定性造成影响。另外,在您遇到了一些疑难杂症的时候,恢复出厂设置就是您最好的,也是最常用的解决方法之一了
安卓2.0系统操作步骤
提示:恢复出厂设置会清空手机内置的数据,所以请您提前备份好个人资料。
1.在“主界面”点击下方“应用程序菜单”进入“应用程序列表”如图1-1;
图1-1
2. 在“应用程序列表”找到并点击“系统设置”,如图1-2所示;
图1-2
3. 进入“系统设置”菜单后,点击“隐私权”,然后点击“恢复出厂设置”,如图1-3到1-4所示;
图1-3
图1-4
4.点击“重置手机”即可。如图1-5所示。(建议不要勾选格式化SD卡选项,否则将清除存储卡上的全部资料)
图1-5
安卓4.0系统操作步骤
提示:恢复出厂设置会清空手机内置的数据,所以请您提前备份好个人资料。
1. 在“主界面”点击“系统设置”,如图2-1所示;
图2-1
2. 选择“全部设置”,如图2-2所示;
图2-2
3. 找到并点击“备份与重置”,如图2-3所示;
图2-3
4. 点击“恢复出厂设置”,如图2-4所示;
图2-4
5. 如有重要资料需勾选“重置前备份数据”,点击“重置手机”,如图2-5所示。
图2-5

 

afinal框架是一个android的 orm 和 ioc 框架。而且封装了android中的httpClient,使其更加简单易用。 afinal是android应用开发的终极框架.

afinal是一个开源的android的orm和ioc应用开发框架,其特点是小巧灵活,代码入侵量少。
在android应用开发中,通过afinal的ioc框架,诸如ui绑定,事件绑定,通过注解可以自动绑定。通过afinal的orm框架,无需任何配置信息,一行代码就可以对android的sqlite数据库进行增删改查操作。同时,afinal内嵌了finalHttp等简单易用的工具,可以轻松的对http请求进行操作。

Afinal里面目前包含了四大组件:


FinalHttp:用于请求http数据,直接ajax方式请求,文件上传, 断点续传下载文件等
FinalBitmap:用于显示bitmap图片,而无需考虑线程并发和oom等问题。
FinalActivity:完全可以通过注解方式绑定控件和事件,无需编写代码。
FinalDb:android中sqlite的orm框架,一行代码搞定增删改查。

小结

无论是学习哪个框架,入手一般的顺序都是如下:

1、学习该框架,会用。

2、精通如何使用该框架(基于框架抛出来的接口设计自己优秀的应用)

3、阅读框架代码,自己画uml图

4、尝试自己写一些小框架。

5、自己写的框架和你认为优秀的框架对比。

在安卓应用开发中碰到1. 4.0 或以上版本的 Android 不能在主线程中联网与 自定义 touch 创建左右划动检测两个问题,下面我找到解决办法了下面大家一起来看看。

继续整理一下做 Android 开发过程中遇到的一些问题和技巧。

1. 4.0 或以上版本的 Android 不能在主线程中联网
Android 应用程序运行在一个 dalvik 虚拟机进程中,当这个进程开始的时候会启动一个主线程( MainThread ),在 Android 4.0 或以上的版本中,强制禁止在主线程执行耗时的网络操作,若需要进行网络操作,则需要另外开辟线程或使用 AsyncTask ,下面介绍的是另外开辟线程的方法。

 代码如下 复制代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.single);
 
    new Thread(postLoad).start();
 
}
     
Runnable postLoad = new Runnable(){
           
    @Override
    public void run() {  
        // TODO Auto-generated method stub  
        // 在这里执行联网操作
    }
};

但是,联网操作后一般都需要根据联网所得数据更新 UI ,这时又会产生一个新问题,主线程负责处理和 UI 相关的操作,因此主线程又被称为 UI 线程。而 Android 采用 UI 单线程模型,只能在主线程中对 UI 元素进行操作,在非 UI 线程直接对 UI 进行了操作,则会报错。

为了解决这个问题,则需要利用 Android 的消息循环的机制实现线程间的通信。即在非 UI 线程发送消息到 UI 线程,让 UI 线程来进行 UI 的操作。例如,可以利用 View 的 post 方法告知 UI 线程执行操作更新 UI 。

 代码如下 复制代码

Runnable postLoad = new Runnable(){
           
    @Override
    public void run() {  
        // TODO Auto-generated method stub
        // 联网获取数据 data
        TextView textShow = (TextView) findViewById(R.id.show);
        textShow.post(new Runnable() {
               
            @Override
            public void run() { // 该方法会在 ui 线程执行 
                textShow.setText(data);
            }
        });
    }
};

2. 检测是否有网络

 代码如下 复制代码

final ConnectivityManager mConnectivity = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
// 检查网络连接,如果无网络可用,就不需要进行连网操作等 
NetworkInfo info = mConnectivity.getActiveNetworkInfo();    
if (info != null ) { // 若有网络
    // 判断网络连接类型
    int netType = info.getType(); 
    int netSubtype = info.getSubtype(); 
 
    if (netType == ConnectivityManager.TYPE_WIFI) { 
        // 若为 WIFI
    } else if (netType == ConnectivityManager.TYPE_MOBILE && netSubtype == TelephonyManager.NETWORK_TYPE_UMTS ) { 
        // 若为 3G
    } else { 
        // 其他网络
    }
} else { // 若无网络
 
}

3. 自定义 touch 创建左右划动检测

     

 代码如下 复制代码
// 定义手势速度记录器
private VelocityTracker velocityTracker;
// 定义手势动作两点之间的距离要求
private static final int VELOCITYX = 900;
private static final int VELOCITYY = 800;
 
WebView postContent = (WebView) findViewById(R.id.postContent);
 
postContent.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View arg0, MotionEvent arg1) {
         // TODO Auto-generated method stub
             
        switch(arg1.getAction()){
        case MotionEvent.ACTION_DOWN:
            if(velocityTracker == null){
                // 取得手势在屏幕上的滑动速度
            velocityTracker = VelocityTracker.obtain();
            velocityTracker.addMovement(arg1);
        }
        break;
    case MotionEvent.ACTION_MOVE:
        if(velocityTracker != null){
            velocityTracker.addMovement(arg1);
        }
        break;
        case MotionEvent.ACTION_CANCEL:
        case MotionEvent.ACTION_OUTSIDE:
            break;
        case MotionEvent.ACTION_UP:
 
        int velocityX = 0, velocityY = 0;
 
        if(velocityTracker != null){
            velocityTracker.addMovement(arg1);
            velocityTracker.computeCurrentVelocity(1000); // 计算每秒滑动多少个像素
            velocityX = (int) velocityTracker.getXVelocity(); // 最后计算检索 X 速度
            velocityY = (int) velocityTracker.getYVelocity(); // 最后计算检索 Y 速度
        }
 
            // 从右向左划
        if( velocityX < -VELOCITYX && velocityY < VELOCITYY && velocityY > -VELOCITYY ){
                // 执行相应操作
                return true;
            } else if( velocityX > VELOCITYX && velocityY < VELOCITYY && velocityY > -VELOCITYY ) { // 从左向右划
                // 执行相应操作
                return true;
            } else {
                // 判断若不是划动操作,则返回 false 使用 WebView 自身的 touch 处理
                return false;
            }
                 
        }
        return false;
    }
});

在检测过程中发现触摸操作不完整(例如划动距离太少,或者误触屏幕),或是直接判断出不是划动操作,必须返回 false ,使到组件自身的 touch 处理得以保留。

下面我整理了自己在android开发时碰到的一些小问题,包括有Missing contentDescription attribute on image in XML与Buttons in button bars should be borderless问题。

最近在做 Android 开发,刚刚入门,遇到不少问题,累积了做重构时的习惯,遇到问题,好好解决,好好总结,于是整理如下:

一. Eclipse Error
1.'Missing contentDescription attribute on image' in XML
原因:缺少图片描述,在 ADT 16 开始会抛出这个警告,确保开发者为图片添加内容描述。

解决方法:为图片添加 android:contentDescription="@string/desc" 属性。

2. Buttons in button bars should be borderless
原因:两个 Buttons 放在一个布局里会被判断为按钮栏,需要添加样式取消它的边框。

解决方法: 在 Buttons 上添加属性 style="?android:attr/buttonBarButtonStyle" 。系统提示也可以在按钮的父布局上添加 style="? android:attr/buttonBarStyle" 属性,但是我在线性布局上测试了一下无效,求高手指导!

二. 开发技巧
1. 在新打开的 Activity 中触发前一个 Activity 作出调整
例如:原页面相应的 class 为 Main.class (主要代码)

 代码如下 复制代码

public class Main extends Activity {
 
    Button page;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        page = (Button) findViewById(R.id.open);
 
        page.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View source) {
                Intent intent = new Intent(Main.this, NewPage.class);
 
                // 启动 intent 对应的 Activity ,并且等待其返回结果,其中 0 是标识码
                startActivityForResult(intent, 0);
            }
        });
     
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent intent){
         
        if( requestCode == 0 && resultCode == 0 ){ // 确认请求标识码和反馈结果标识码同为 0
            // 改变本页面或其他操作
        }
    }
 
}

public class NewPage extends Activity {
 
    Button cancel;
 
    Intent intent;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.newpage);
         
        // 获取到上一个页面传过来的 Intent
        intent = this.getIntent();
 
        cancel = (Button) findViewById(R.id.confirm);
        cancel.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View source) {
                // 反馈结果,将 intent 传回上一个 Activity ,这时在上一页触发 onActivityResult 方法,重写该方法可以对原页面作出调整
                NewPage.this.setResult(0, intent);
                NewPage.this.finish();
            }
        });
 
    }
 
}

如果需要在 Activity 之间传输数据,还可以使用 Bunble 在 intent 中保存和获取数据。

2. 获取列表中被点击事项的位置
扩展 BaseAdapter 类,重写 getView 方法,第一个方法即为事项的位置,若要配合 cursor 使用,则可以使用 cursor.moveToPosition(position) 把 cursor 移动到事项在数据库中相应的数据行。

标签:[!--infotagslink--]

您可能感兴趣的文章: