gpt4 book ai didi

android - dalvikvm-heap 在上传视频 android 时增长堆( fragment 情况)

转载 作者:行者123 更新时间:2023-11-29 01:55:04 25 4
gpt4 key购买 nike

我在从 4x 设备上传视频时遇到问题。我知道只有 15 秒的视频录制会在 samsung S2 中创建一个 30 mb 的文件,但是当我尝试先将视频上传到 php 服务器时,它显示了消息喜欢 D/dalvikvm(7638):GC_FOR_ALLOC 释放 263K,9% 释放 12838K/14087K,暂停 13ms,总计 13ms I/dalvikvm-heap(7638):将堆( fragment 情况)增加到 14.481MB,分配 1048592 字节 D/dalvikvm(7638): GC_FOR_ALLOC freed <1K, 9% free 13861K/15175K, paused 22ms, total 22ms D/dalvikvm(7638): GC_CONCURRENT freed <1K, 9% free 13862K/15175K, paused 12ms+2ms, total 27ms

I know it is the memory managment concept and device memory dependent but I want a real solution for it as I am stuck here from quite a few days.
Below is my code to call and upload the video to server.

public void newmethod( String Imageurl ) throws ClientProtocolException, IOException
{
byte[] data ;
int bytenumber,bufferSize,bytesRead;
int maxBufferSize = 1*1024*1024;
DataOutputStream dos = null;
//File sourceFile = searchForFileInExternalStorage("video.3gp");

Log.e("in the method the path", ""+Imageurl);

FileInputStream fileInputStream = new FileInputStream(Imageurl);
bytenumber = fileInputStream.available();
Log.e("in the method the the size of the file is", ""+bytenumber);
// dos = new DataOutputStream(conn.getOutputStream());
bufferSize = Math.min(bytenumber, maxBufferSize);
data = new byte[bufferSize];
//ProgressDialog pr = new ProgressDialog(getApplicationContext());
// pr.addContentView(getCurrentFocus(), null);
// read file and write it into form...
bytesRead = fileInputStream.read(data, 0, bufferSize);

while (bytesRead > 0) {
// dos.write(data, 0, bufferSize);
bytenumber = fileInputStream.available();
bufferSize = Math.min(bytenumber, maxBufferSize);
bytesRead = fileInputStream.read(data, 0, bufferSize);
}

// pr.show();


HttpClient httpClient = new DefaultHttpClient();
HttpPost postRequest = new HttpPost("http://67.52.165.116/Kakz/mobiles/uploadvideo");
ByteArrayBody bab = new ByteArrayBody( data, Imageurl);
MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
reqEntity.addPart("user_video", bab);

FormBodyPart bodyPart=new FormBodyPart("title", new StringBody(title));
reqEntity.addPart(bodyPart);
bodyPart=new FormBodyPart("desc", new StringBody(description));
reqEntity.addPart(bodyPart);
bodyPart=new FormBodyPart("source", new StringBody("android"));
reqEntity.addPart(bodyPart);
postRequest.setEntity(reqEntity);
final HttpResponse response = httpClient.execute(postRequest);
// FileInputStream fileInputStream = new FileInputStream(response.getEntity().getContent());


runOnUiThread(new Runnable() {
public void run() {

//stuff that updates ui

BufferedReader in = null;
try {
in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));

} catch (IllegalStateException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String line = null;

try {
while((line = in.readLine()) != null) {
System.out.println(line);

titleText.setText("");
descriptionText.setText("");
// Toast.makeText(getApplicationContext(), "Video Uploaded successfully", Toast.LENGTH_LONG).show();

if (line.equalsIgnoreCase("Its too Heavy")) {
// pr.dismiss();
// titleText.setText("");
//descriptionText.setText("");
Toast.makeText(getApplicationContext(), "Video size is too heavy", Toast.LENGTH_LONG).show();

}

else if (line.equalsIgnoreCase("Error")) {
// pr.dismiss();
// titleText.setText("");
//descriptionText.setText("");
Toast.makeText(getApplicationContext(), "Error uploading video", Toast.LENGTH_LONG).show();


}

else if (line.equalsIgnoreCase("Uploaded")) {
//pr.dismiss();
//titleText.setText("");
//descriptionText.setText("");
Toast.makeText(getApplicationContext(), "Video uploaded successfully", Toast.LENGTH_LONG).show();

}

}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});

Please let me know that how I should manage the code to get it right.
Any help would be appreciated ASAP`enter code here`

最佳答案

I am facing problem whiel uploading the video from the 4x devices.

这不是问题。当您执行成本非常高的操作时,这是正常行为。您的堆大小(隐式确定)暂时不够用,因此需要增大。你应该如何写入 list 是平等的行为

android:largeHeap="true"

此属性无效。当堆需要更多大小时,会自行增长 - 当需要时。当您没有太多内存时,通常会显示此消息。

GC_FOR_ALLOC freed 263K, 9% free 12838K/14087K, paused 13ms, total 13ms I/dalvikvm-heap(7638)

这里你只有 9% 的内存,堆需要增加。通常它发生在 ALLOC 小于 10% 的时候,不管你是否使用 Thread,一旦它是一个高成本的操作。当您的堆大小达到一个“临界点”时,出于安全原因以及 VM,应用程序将自动停止。

一种可能的解决方案是,您需要将文件分成更小的 block ,然后一个一个地上传。

关于android - dalvikvm-heap 在上传视频 android 时增长堆( fragment 情况),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15676409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com