Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使我的android应用程序方法减少内存消耗_Java_Android_Xml_Ram - Fatal编程技术网

Java 如何使我的android应用程序方法减少内存消耗

Java 如何使我的android应用程序方法减少内存消耗,java,android,xml,ram,Java,Android,Xml,Ram,我正在寻找一些建议,使我的应用程序更内存友好。在更大的安卓平板设备上,该应用程序运行良好,我正在一台运行安卓2.3.5的HTC Desire S上进行测试。我知道,按照今天的标准,安卓2.3.5是一款古老的手机,但每当我尝试运行这种方法时,手机都会强制关闭。我想知道人们是否可以提供任何建议来修改我的代码,使其在RAM方面更有效率 请参见下面我的android方法和我的logcat打印输出: Android活动方法 public void uploadDataToCrowdSnapCymru()

我正在寻找一些建议,使我的应用程序更内存友好。在更大的安卓平板设备上,该应用程序运行良好,我正在一台运行安卓2.3.5的HTC Desire S上进行测试。我知道,按照今天的标准,安卓2.3.5是一款古老的手机,但每当我尝试运行这种方法时,手机都会强制关闭。我想知道人们是否可以提供任何建议来修改我的代码,使其在RAM方面更有效率

请参见下面我的android方法和我的logcat打印输出:

Android活动方法

public void uploadDataToCrowdSnapCymru() throws UnsupportedEncodingException {
    ArrayList<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();
    nameValuePair.add(new BasicNameValuePair("name", nameString));
    nameValuePair.add(new BasicNameValuePair("desc", descString));
    nameValuePair.add(new BasicNameValuePair("lat", latString));
    nameValuePair.add(new BasicNameValuePair("lng", lngString));
    nameValuePair.add(new BasicNameValuePair("project", projectString));

    ByteArrayOutputStream bao = new ByteArrayOutputStream();
    photo.compress(Bitmap.CompressFormat.JPEG, 100, bao);
    byte [] ba = bao.toByteArray();
    String ba1=Base64.encodeBytes(ba);
    nameValuePair.add(new BasicNameValuePair("snap", ba1));

    try {
        //EXECUTE POST
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://users.aber.ac.uk/dwd/mfb/php/receiveUserData.php");
        httppost.setHeader("Content-Type",
                "application/x-www-form-urlencoded;");
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePair, "UTF-8"));
        HttpResponse response = httpclient.execute(httppost);
        String responseText = EntityUtils.toString(response.getEntity());
        System.out.println(responseText);

        if(responseText != null){
            Toast.makeText(this, "Record uploaded! View it at CrowdSnapCymru.com", Toast.LENGTH_LONG).show();
        }
    }

    catch(Exception e) {
        Log.e("log_tag", "Error in http connection"+e.toString());

    }
}
任何人能提供的任何建议都会受到欢迎。最后一个问题是
httppost
方法在移动网络和Wi-Fi上是否有效?谢谢我假设他们是这样做的,因为互联网浏览器应用程序在网络和wifi上都能工作,而且原理是一样的

  • 您正在将照片压缩为质量为100的JPEG格式。较低的质量可能会或可能不会产生明显的影响,但几乎可以肯定的是,影响会更小。试试50英镑
  • 将压缩后的图像放入字节数组,然后立即将其base64编码为字符串。因为字节数组是一个中介,所以只要不再需要它,就通过设置ba=null来释放它。如果可以回收并释放原始照片位图,也可以这样做:“photo.recycle();photo=null;”
  • 您上载了一个base64字符串。考虑使用多部分表单数据,它可以直接从压缩的BytTayRayOuttoSt流中传输位图。这样,您根本不需要两个中间表示。见:
  • POST在移动网络上运行良好,但速度较慢。如果你上传的是一个大图像,那么需要一段时间。这是压缩JPEG图像质量较低的另一个原因

  • 您正在将照片压缩为质量为100的JPEG格式。较低的质量可能会或可能不会产生明显的影响,但几乎可以肯定的是,影响会更小。试试50英镑
  • 将压缩后的图像放入字节数组,然后立即将其base64编码为字符串。因为字节数组是一个中介,所以只要不再需要它,就通过设置ba=null来释放它。如果可以回收并释放原始照片位图,也可以这样做:“photo.recycle();photo=null;”
  • 您上载了一个base64字符串。考虑使用多部分表单数据,它可以直接从压缩的BytTayRayOuttoSt流中传输位图。这样,您根本不需要两个中间表示。见:
  • POST在移动网络上运行良好,但速度较慢。如果你上传的是一个大图像,那么需要一段时间。这是压缩JPEG图像质量较低的另一个原因

    05-15 23:52:55.938: E/dalvikvm(8950): Out of memory: Heap Size=9927KB, Allocated=5369KB, Bitmap Size=8756KB, Limit=20480KB
    05-15 23:52:55.938: E/dalvikvm(8950): Extra info: Footprint=9927KB, Allowed Footprint=9927KB, Trimmed=504KB
    05-15 23:52:55.938: D/AndroidRuntime(8950): Shutting down VM
    05-15 23:52:55.938: W/dalvikvm(8950): threadid=1: thread exiting with uncaught exception (group=0x400205a0)
    05-15 23:52:55.938: E/AndroidRuntime(8950): FATAL EXCEPTION: main
    05-15 23:52:55.938: E/AndroidRuntime(8950): java.lang.OutOfMemoryError: (Heap Size=9927KB, Allocated=5369KB, Bitmap Size=8756KB)
    05-15 23:52:55.938: E/AndroidRuntime(8950):     at java.io.ByteArrayOutputStream.toByteArray(ByteArrayOutputStream.java:122) 
    05-15 23:52:55.938: E/AndroidRuntime(8950):     at rcahmw.prototype.crowdsnapcymru.UploadRecord.uploadDataToCrowdSnapCymru(UploadRecord.java:119)
    05-15 23:52:55.938: E/AndroidRuntime(8950):     at rcahmw.prototype.crowdsnapcymru.UploadRecord$1.onClick(UploadRecord.java:85)
    05-15 23:52:55.938: E/AndroidRuntime(8950):     at android.view.View.performClick(View.java:2532)
    05-15 23:52:55.938: E/AndroidRuntime(8950):     at android.view.View$PerformClick.run(View.java:9293)
    05-15 23:52:55.938: E/AndroidRuntime(8950):     at android.os.Handler.handleCallback(Handler.java:587)
    05-15 23:52:55.938: E/AndroidRuntime(8950):     at android.os.Handler.dispatchMessage(Handler.java:92)
    05-15 23:52:55.938: E/AndroidRuntime(8950):     at android.os.Looper.loop(Looper.java:150)
    05-15 23:52:55.938: E/AndroidRuntime(8950):     at android.app.ActivityThread.main(ActivityThread.java:4277)
    05-15 23:52:55.938: E/AndroidRuntime(8950):     at java.lang.reflect.Method.invokeNative(Native Method)
    05-15 23:52:55.938: E/AndroidRuntime(8950):     at java.lang.reflect.Method.invoke(Method.java:507)
    05-15 23:52:55.938: E/AndroidRuntime(8950):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
    05-15 23:52:55.938: E/AndroidRuntime(8950):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)