Mediaplayer新手有关问题
Mediaplayer新手问题
我写了个视频播放器,要求是一直循环播放文件夹下的所有视频,但我这个播放器循环播一段时间后就停了,有时还死机,我写了个log看了下,内存从刚开始的200多M,到最后的10M,我找了很久也找不出我这播放器哪耗内存啊,请各位高手帮我看看我代码哪里不写的不好
package ycq.informationPublish;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import ycq.informationPublish.filehandle.PropertiesFile;
import android.app.Activity;
import android.app.ActivityManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Debug.MemoryInfo;
import android.util.Log;
import android.view.KeyEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.TextView;
import android.widget.Toast;
public class MediaActivity extends Activity implements SurfaceHolder.Callback,MediaPlayer.OnPreparedListener
{
/** Called when the activity is first created. */
private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
MediaPlayer mMediaPlayer;
private List<String> listVideo=new ArrayList<String>();
int video=0;
private int videoWidth;
private int videoHeight;
private MyReceiver receiver;
String path="/mnt/flash/video";
// String path="/sdcard/video";
PropertiesFile pro=new PropertiesFile();
BufferedWriter bos;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.media);
receiver = new MyReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.MY_VIDEO");
//注册
registerReceiver(receiver, filter);
surfaceView = (SurfaceView)findViewById(R.id.videoView);
surfaceHolder = surfaceView.getHolder();
mMediaPlayer = new MediaPlayer();
path=pro.getPath(); //获得视频文件路径
surfaceHolder.addCallback(this);
surfaceHolder.setFixedSize(480,800);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
//log的存储位置
File log=new File("/mnt/flash/log.txt");
if(log.exists())
{
log=new File("/mnt/flash/log1.txt");
}
try {
bos= new BufferedWriter(new OutputStreamWriter(new FileOutputStream(log)));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
writeToFile("start mediaActivity");//调用写log的方法
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode == KeyEvent.KEYCODE_BACK)
{
mMediaPlayer.stop();
mMediaPlayer.release();
unregisterReceiver(receiver);
MediaActivity.this.finish();
return true;
} //System.exit(0);
return super.onKeyDown(keyCode, event);
我写了个视频播放器,要求是一直循环播放文件夹下的所有视频,但我这个播放器循环播一段时间后就停了,有时还死机,我写了个log看了下,内存从刚开始的200多M,到最后的10M,我找了很久也找不出我这播放器哪耗内存啊,请各位高手帮我看看我代码哪里不写的不好
package ycq.informationPublish;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import ycq.informationPublish.filehandle.PropertiesFile;
import android.app.Activity;
import android.app.ActivityManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Debug.MemoryInfo;
import android.util.Log;
import android.view.KeyEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.TextView;
import android.widget.Toast;
public class MediaActivity extends Activity implements SurfaceHolder.Callback,MediaPlayer.OnPreparedListener
{
/** Called when the activity is first created. */
private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
MediaPlayer mMediaPlayer;
private List<String> listVideo=new ArrayList<String>();
int video=0;
private int videoWidth;
private int videoHeight;
private MyReceiver receiver;
String path="/mnt/flash/video";
// String path="/sdcard/video";
PropertiesFile pro=new PropertiesFile();
BufferedWriter bos;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.media);
receiver = new MyReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.MY_VIDEO");
//注册
registerReceiver(receiver, filter);
surfaceView = (SurfaceView)findViewById(R.id.videoView);
surfaceHolder = surfaceView.getHolder();
mMediaPlayer = new MediaPlayer();
path=pro.getPath(); //获得视频文件路径
surfaceHolder.addCallback(this);
surfaceHolder.setFixedSize(480,800);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
//log的存储位置
File log=new File("/mnt/flash/log.txt");
if(log.exists())
{
log=new File("/mnt/flash/log1.txt");
}
try {
bos= new BufferedWriter(new OutputStreamWriter(new FileOutputStream(log)));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
writeToFile("start mediaActivity");//调用写log的方法
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode == KeyEvent.KEYCODE_BACK)
{
mMediaPlayer.stop();
mMediaPlayer.release();
unregisterReceiver(receiver);
MediaActivity.this.finish();
return true;
} //System.exit(0);
return super.onKeyDown(keyCode, event);