每次调用以下代码,然后返回到上一界面,内存基本只会增加,减少的非常少。一、使用BaseAdapter的泄露显示SmsRecord: intent= new Intent();
intent.setClass(getApplicationContext(), NormalSmsRecordActivity.class);
startActivity(intent);
public class NormalSmsRecordActivity extends SmsRecord
{
@Override
public void onCreate(Bundle savedInstanceState)
{
//先显示一定数量短信,然后在后台刷新
super.onCreate(savedInstanceState);
} @Override
public void onDestroy()
{
super.onDestroy();
}
/**
*@param
* 刷新当前smsArrayList数据
*/
@Override
protected void RefreshData()
{
//SysSmsManager smsManager = new SysSmsManager();
//arrayList = smsManager.getSysSmsDetail(this, boxType);
Sms sms = new Sms();
sms.setArea("昆明");
sms.setSmsContent("测试记录1");
sms.setSmsName("emma");
sms.setSmsNumber("1125444546");
arrayList.add(sms);
}}public abstract class SmsRecord extends ListActivity
//implements OnItemClickListener, OnItemLongClickListener
{
//短信记录数组
protected List<Sms> arrayList = new ArrayList<Sms>();
MyItemAdapter adapter = null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState); RefreshData();
initialListView();
// refreshAdapter();
//IntentFilter filter = new IntentFilter();
//filter.addAction(PublicEnum.SMS_ACTION);
//registerReceiver(receiver, filter);
} public void initialListView() { //List<Sms> mArrayListTmp = new ArrayList<Sms>();
//mArrayListTmp = arrayList;
adapter= new MyItemAdapter(getApplicationContext());
adapter.notifyDataSetChanged();
setListAdapter(adapter);
// 将快捷菜单注册到界面控件上。
//registerForContextMenu(this.getListView()); //this.getListView().setOnCreateContextMenuListener(this);
}
@Override
public void onDestroy()
{
//Activity被完全从系统内存中一次时调用。该方法被调用可能是因为人为直接调用onFinish()方法或者
//系统觉定停止该Activity以释放资源
//unregisterReceiver(receiver);
super.onDestroy();
//refreshSmsThread.interrupt();
arrayList =null;
//mArrayListTmp=null;
}
/**
* 刷新当前界面arrayList数据
*/
protected abstract void RefreshData();
public class MyItemAdapter extends BaseAdapter { //private List<Sms> list;
private LayoutInflater mInflater;
private int position;
public int lastCheckPos = -1; public MyItemAdapter(Context context) { //this.list = list;
this.mInflater = LayoutInflater.from(context);
} @Override
public int getCount() {
//return list.size();
return arrayList.size();
} @Override
public Object getItem(int position) {
if (position < arrayList.size()) {
this.position = position;
return arrayList.get(position);
} else {
return null;
}
} @Override
public long getItemId(int position) {
if (position < arrayList.size()) {
this.position = position;
return arrayList.get(position).getSmsId();
} else {
return -1;
}
} public int getPosition() {
return this.position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) { final Sms item = arrayList.get(position);
ItemViewHolder holder = null;
if (convertView == null) {
holder = new ItemViewHolder();
convertView = mInflater.inflate(R.layout.sms_record, null);
holder.myImageView = (ImageView) convertView
.findViewById(R.id.sms_record_image);
holder.nameTextView = (TextView) convertView
.findViewById(R.id.smsRecordNumberText);
holder.dateTextView = (TextView) convertView
.findViewById(R.id.smsRecordDateText);
holder.areaTextView = (TextView) convertView
.findViewById(R.id.smsRecordNumberAreaText);
holder.checkBox = (CheckBox) convertView
.findViewById(R.id.smsRecordCheckBox);
holder.reportTextView = (TextView) convertView
.findViewById(R.id.smsRecordReportText);
holder.contentTextView = (TextView) convertView
.findViewById(R.id.smsRecordContentText);
//holder.setOnClickListener();
convertView.setTag(holder);
} else {
holder = (ItemViewHolder) convertView.getTag();
}
String name = item.getSmsName();
if (name == null || name.equals(""))
holder.nameTextView.setText(item.getSmsNumber());
else
holder.nameTextView.setText(item.getSmsName());
holder.areaTextView.setText(item.getArea());
holder.reportTextView.setText(item.getSmsReport());
holder.contentTextView.setText(item.getSmsContent());
holder.checkBox.setChecked(item.isChecked());
holder.currCheckedindex = position; return convertView; } protected class ItemViewHolder {
public ImageView myImageView;
public TextView nameTextView;
public TextView dateTextView;
public TextView areaTextView;
public CheckBox checkBox; public TextView reportTextView;
public TextView contentTextView;
public int currCheckedindex;
}
}
}二、调用addPreferencesFromResource泄露public class SharePreMemoryLose extends PreferenceActivity
{ @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.sms_forward_set);
//setContentView(R.layout.about_menu);
}
}
intent.setClass(getApplicationContext(), NormalSmsRecordActivity.class);
startActivity(intent);
public class NormalSmsRecordActivity extends SmsRecord
{
@Override
public void onCreate(Bundle savedInstanceState)
{
//先显示一定数量短信,然后在后台刷新
super.onCreate(savedInstanceState);
} @Override
public void onDestroy()
{
super.onDestroy();
}
/**
*@param
* 刷新当前smsArrayList数据
*/
@Override
protected void RefreshData()
{
//SysSmsManager smsManager = new SysSmsManager();
//arrayList = smsManager.getSysSmsDetail(this, boxType);
Sms sms = new Sms();
sms.setArea("昆明");
sms.setSmsContent("测试记录1");
sms.setSmsName("emma");
sms.setSmsNumber("1125444546");
arrayList.add(sms);
}}public abstract class SmsRecord extends ListActivity
//implements OnItemClickListener, OnItemLongClickListener
{
//短信记录数组
protected List<Sms> arrayList = new ArrayList<Sms>();
MyItemAdapter adapter = null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState); RefreshData();
initialListView();
// refreshAdapter();
//IntentFilter filter = new IntentFilter();
//filter.addAction(PublicEnum.SMS_ACTION);
//registerReceiver(receiver, filter);
} public void initialListView() { //List<Sms> mArrayListTmp = new ArrayList<Sms>();
//mArrayListTmp = arrayList;
adapter= new MyItemAdapter(getApplicationContext());
adapter.notifyDataSetChanged();
setListAdapter(adapter);
// 将快捷菜单注册到界面控件上。
//registerForContextMenu(this.getListView()); //this.getListView().setOnCreateContextMenuListener(this);
}
@Override
public void onDestroy()
{
//Activity被完全从系统内存中一次时调用。该方法被调用可能是因为人为直接调用onFinish()方法或者
//系统觉定停止该Activity以释放资源
//unregisterReceiver(receiver);
super.onDestroy();
//refreshSmsThread.interrupt();
arrayList =null;
//mArrayListTmp=null;
}
/**
* 刷新当前界面arrayList数据
*/
protected abstract void RefreshData();
public class MyItemAdapter extends BaseAdapter { //private List<Sms> list;
private LayoutInflater mInflater;
private int position;
public int lastCheckPos = -1; public MyItemAdapter(Context context) { //this.list = list;
this.mInflater = LayoutInflater.from(context);
} @Override
public int getCount() {
//return list.size();
return arrayList.size();
} @Override
public Object getItem(int position) {
if (position < arrayList.size()) {
this.position = position;
return arrayList.get(position);
} else {
return null;
}
} @Override
public long getItemId(int position) {
if (position < arrayList.size()) {
this.position = position;
return arrayList.get(position).getSmsId();
} else {
return -1;
}
} public int getPosition() {
return this.position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) { final Sms item = arrayList.get(position);
ItemViewHolder holder = null;
if (convertView == null) {
holder = new ItemViewHolder();
convertView = mInflater.inflate(R.layout.sms_record, null);
holder.myImageView = (ImageView) convertView
.findViewById(R.id.sms_record_image);
holder.nameTextView = (TextView) convertView
.findViewById(R.id.smsRecordNumberText);
holder.dateTextView = (TextView) convertView
.findViewById(R.id.smsRecordDateText);
holder.areaTextView = (TextView) convertView
.findViewById(R.id.smsRecordNumberAreaText);
holder.checkBox = (CheckBox) convertView
.findViewById(R.id.smsRecordCheckBox);
holder.reportTextView = (TextView) convertView
.findViewById(R.id.smsRecordReportText);
holder.contentTextView = (TextView) convertView
.findViewById(R.id.smsRecordContentText);
//holder.setOnClickListener();
convertView.setTag(holder);
} else {
holder = (ItemViewHolder) convertView.getTag();
}
String name = item.getSmsName();
if (name == null || name.equals(""))
holder.nameTextView.setText(item.getSmsNumber());
else
holder.nameTextView.setText(item.getSmsName());
holder.areaTextView.setText(item.getArea());
holder.reportTextView.setText(item.getSmsReport());
holder.contentTextView.setText(item.getSmsContent());
holder.checkBox.setChecked(item.isChecked());
holder.currCheckedindex = position; return convertView; } protected class ItemViewHolder {
public ImageView myImageView;
public TextView nameTextView;
public TextView dateTextView;
public TextView areaTextView;
public CheckBox checkBox; public TextView reportTextView;
public TextView contentTextView;
public int currCheckedindex;
}
}
}二、调用addPreferencesFromResource泄露public class SharePreMemoryLose extends PreferenceActivity
{ @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.sms_forward_set);
//setContentView(R.layout.about_menu);
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货