Java 如何在android中释放堆内存
我想开发一个列表视图,其中包含一个图像和一个文本视图。这段代码完成了Java 如何在android中释放堆内存,java,android,Java,Android,我想开发一个列表视图,其中包含一个图像和一个文本视图。这段代码完成了 很好,但我的代码分配了大量堆内存,但并没有释放内存。 我初始化了ondestroy中的所有空值,但它对我没有任何作用 帮助我任何一个人,我被困在这个 public class EventsActivity extends Activity implements OnClickListener { private ListView mListview; private EventsAdapter adapter; Initial
很好,但我的代码分配了大量堆内存,但并没有释放内存。 我初始化了ondestroy中的所有空值,但它对我没有任何作用 帮助我任何一个人,我被困在这个
public class EventsActivity extends Activity implements OnClickListener {
private ListView mListview;
private EventsAdapter adapter;
InitialRequestResponseDto mInitialRequestResponseDto;
Context mContext;
private ImageButton mPlayButton;
//private ImageButton mRepeatButton;
private ImageButton mNextButton;
private ImageButton mPreviousButton;
//private ImageButton mStopButton;
TextView title, descrip;
ImageView songIcon;
boolean mBroadcastIsRegistered;
Intent intent, serIntent;
static ProgressDialog mdialog;
LazyImageLoader lazyImageLoader;
private static int songEnded = 0;
private TextView mHeading;
final String SUGGESTED_URL = "http://www.vorbis.com/music/Epoq-Lepidoptera.ogg";
RelativeLayout mRelativeLayout;
private ImageButton mHome;
private ImageButton mFm;
private String langid;
private ImageView mArrow;
Typeface tf,tf2;
private Button mBack;
String mRprgmname;
private TextView mPrgmTxtVw;
private TextView mPrgmName;
private RelativeLayout mrelative;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;
setContentView(R.layout.commonsongslist);
mrelative = (RelativeLayout) findViewById(R.id.Rlplayall);
title = (TextView) findViewById(R.id.songnamemaint);
songIcon = (ImageView) findViewById(R.id.cntrylogo);
mPrgmTxtVw = (TextView) findViewById(R.id.prmnametxt);
mPrgmName = (TextView) findViewById(R.id.prmname);
mBack = (Button) findViewById(R.id.backs);
mHome = (ImageButton) findViewById(R.id.home);
mRelativeLayout = (RelativeLayout) findViewById(R.id.commonlayout);
mRelativeLayout.setBackgroundColor(Color.rgb(234, 183, 51));
mListview = (ListView) findViewById(R.id.listsongs);
mHeading = (TextView) findViewById(R.id.txtheading);
mPlayButton = (ImageButton) findViewById(R.id.btnPlay);
mNextButton = (ImageButton) findViewById(R.id.nextbtn);
mPreviousButton = (ImageButton) findViewById(R.id.prvsbtn);
mArrow = (ImageView) findViewById(R.id.arrowimage);
mArrow.setImageResource(R.drawable.events_a);
mFm = (ImageButton) findViewById(R.id.fmbtn);
Intent intent = getIntent();
langid = intent.getStringExtra("languageid");
lazyImageLoader = new LazyImageLoader(mContext);
mHeading.setText("Events");
DisplayMetrics metrics = mContext.getResources().getDisplayMetrics();
// mHeading.setTextSize(20/ metrics.scaledDensity);
if (metrics.scaledDensity < 1) {
mHeading.setTextSize(16);
} else if (metrics.scaledDensity >= 2) {
mHeading.setTextSize(16);
} else if (metrics.scaledDensity >= 1 && metrics.scaledDensity < 2) {
mHeading.setTextSize(18 / metrics.scaledDensity);
}
Typeface tf = Typeface.createFromAsset(this.getAssets(),
"fonts/Oswald-Bold.ttf");
mHeading.setTypeface(tf);
Typeface tf2 = Typeface.createFromAsset(this.getAssets(),
"fonts/arial.ttf");
mBack.setTypeface(tf2);
mBack.setBackgroundResource(R.drawable.events_back);
mRprgmname = getIntent().getStringExtra("name");
if (Utills.isNetworkAvailable(mContext)) {
mPlayButton.setOnClickListener(this);
mNextButton.setOnClickListener(this);
mPreviousButton.setOnClickListener(this);
}
mBack.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
mHome.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
LanguagesGetAsnchTask task = new LanguagesGetAsnchTask(
mContext, Constants.LANGUAGE_URL);
task.execute();
}
});
mFm.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
RadioAsynchTask
task=newRadioAsynchTask(mContext,Constants.channels,Constants.LANGUAGE_URL, langid,
mRprgmname);
task.execute();
}
});
mInitialRequestResponseDto = (InitialRequestResponseDto) getIntent()
.getSerializableExtra("events");
adapter = new EventsAdapter(this, 1, mInitialRequestResponseDto
.getInitialResposeBean().getEvevtsdto());
mListview.setAdapter(adapter);
mListview.invalidate();
mListview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int pos,
long arg3) {
String title = mInitialRequestResponseDto
.getInitialResposeBean().getEvevtsdto().get(pos)
.getEvent_title();
String image = mInitialRequestResponseDto
.getInitialResposeBean().getEvevtsdto().get(pos)
.getEvent_poster();
String desc = mInitialRequestResponseDto
.getInitialResposeBean().getEvevtsdto().get(pos)
.getLong_desc();
Intent intent = new Intent(mContext, DetailedEvents.class);
intent.putExtra("image_path", image);
intent.putExtra("languageid", langid);
intent.putExtra("description", desc);
intent.putExtra("eventtitle", title);
intent.putExtra("name", mRprgmname);
startActivity(intent);
}
});
}
private void updateUi(Intent serviceIntent) {
if (songEnded == 1) {
mPlayButton.setImageResource(R.drawable.play);
updateUI();
}
}
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent serviceIntent) {
EventsActivity.this.serIntent = serviceIntent;
if (serviceIntent.getAction().equalsIgnoreCase(
MusicService.ACTION_STATE_CHANGED)) {
updateUI();
}
if (serviceIntent.getAction().equalsIgnoreCase(
MusicService.BROADCAST_ACTION)) {
updateUi(serviceIntent);
}
if (serviceIntent.getAction().equalsIgnoreCase(
MusicService.BROADCAST_BUFFER)) {
Toast.makeText(context, "Buffering",
Toast.LENGTH_LONG).show();
}
}
};
private void updateUI() {
RadioDto songItem = MusicHolder.getInstance().getCurrentItem();
State mState = MusicHolder.getInstance().getState();
if (mState == State.Playing) {
mPlayButton.setImageResource(R.drawable.pause);
} else if (mState == State.Paused || mState == State.Stopped) {
mPlayButton.setImageResource(R.drawable.play);
}
if (songItem != null) {
title.setSelected(true);
title.setText(songItem.getTitle());
title.setTypeface(tf2);
title.setTextColor(Color.rgb(234, 183, 51));
if (AMP.isAlbumname()) {
mPrgmTxtVw.setText("Album Name:");
} else {
mPrgmTxtVw.setText("Program Name:");
}
if (mRprgmname != null) {
mPrgmName.setText(mRprgmname);
} else {
mPrgmName.setText(" ");
}
mPrgmName.setSelected(true);
mPrgmName.setTypeface(tf2);
mPrgmTxtVw.setTypeface(tf2);
DisplayMetrics metrics = mContext.getResources()
.getDisplayMetrics();
if (metrics.scaledDensity < 1) {
title.setTextSize(16);
mPrgmTxtVw.setTextSize(14);
mPrgmName.setTextSize(14);
} else if (metrics.scaledDensity >= 2) {
title.setTextSize(16);
mPrgmTxtVw.setTextSize(14);
mPrgmName.setTextSize(14);
RelativeLayout.LayoutParams params =
(RelativeLayout.LayoutParams) mrelative
.getLayoutParams();
params.setMargins(0, 0, 0, 90); // left, top, right, bottom
mrelative.setLayoutParams(params);
} else if (metrics.scaledDensity >= 1 && metrics.scaledDensity < 2)
{
title.setTextSize(18 / metrics.scaledDensity);
mPrgmName.setTextSize(16 / metrics.scaledDensity);
mPrgmTxtVw.setTextSize(16 / metrics.scaledDensity);
}
if (songItem.getImage() != null) {
final String url = songItem.getImage();
songIcon.setTag(url);
Thread Moviesthread3 = new Thread(new Runnable() {
@Override
public void run() {
try {
Bitmap bitmap = Utills.getBitmapFromURL(url);
bitmap = Utills.getCircularBitmap(bitmap);
songIcon.setImageBitmap(bitmap);
bitmap.recycle();
} catch (Exception e) {
e.printStackTrace();
}
}
});
Moviesthread3.start();
songIcon.invalidate();
}
} else {
title.setText("Radio Khushi");
// descrip.setText("select song from playlist");
}
}
protected void onResume() {
super.onResume();
boolean dia = false;
registerReceiver(broadcastReceiver, new IntentFilter(
MusicService.ACTION_STATE_CHANGED));
registerReceiver(broadcastReceiver, new IntentFilter(
MusicService.BROADCAST_ACTION));
registerReceiver(broadcastReceiver, new IntentFilter(
MusicService.BROADCAST_BUFFER));
mBroadcastIsRegistered = true;
if (songEnded == 1) {
mPlayButton.setImageResource(R.drawable.play);
}
updateUI();
}
@Override
protected void onPause() {
super.onPause();
if (mBroadcastIsRegistered) {
try {
unregisterReceiver(broadcastReceiver);
mBroadcastIsRegistered = false;
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(),
e.getClass().getName() + " " + e.getMessage(),
Toast.LENGTH_LONG).show();
}
}
}
public void onClick(View target) {
MusicHolder musicHolder = MusicHolder.getInstance();
final State mState = musicHolder.getState();
if (musicHolder.getItems().size() != 0) {
Intent intent = new Intent(this, MusicService.class);
if (target == mPlayButton) {
if (mState == State.Playing && mState != State.Preparing
&& mState != State.Retrieving) {
intent.setAction(MusicService.ACTION_PAUSE);
startService(intent);
} else if (mState == State.Paused || mState == State.Stopped) {
intent.setAction(MusicService.ACTION_PLAY);
startService(intent);
}
} else if (target == mNextButton) {
intent.setAction(MusicService.ACTION_SKIP);
mNextButton.setBackgroundResource(R.drawable.next_pressed);
startService(intent);
String time = "";
int index = musicHolder.getIndex();
InitialRequestResponseDto mInitialRequestResponseDto1 = null;
InitialResposeBean ini = new InitialResposeBean();
ini.setRadiolist(musicHolder.getItems());
mInitialRequestResponseDto1 = new InitialRequestResponseDto();
mInitialRequestResponseDto1.setInitialResposeBean(ini);
index++;
if (index == mInitialRequestResponseDto1
.getInitialResposeBean().getRadiolist().size()) {
index = 0;
}
time = mInitialRequestResponseDto1.getInitialResposeBean()
.getRadiolist().get(index).getTime_zone();
String[] s = time.split(" ");
TimeZone tz = TimeZone.getTimeZone("GMT" + s[0] + s[1]);
Calendar c = Calendar.getInstance(tz);
String caltime = c.get(Calendar.HOUR_OF_DAY) + "."
+ c.get(Calendar.MINUTE);
mRprgmname = Utills.getpname1(mInitialRequestResponseDto1,
index, caltime, Utills.getdayofweek());
} else if (target == mPreviousButton) {
intent.setAction(MusicService.ACTION_REWIND);
mPreviousButton.setBackgroundResource(R.drawable.prev_pressed);
startService(intent);
String time = "";
InitialRequestResponseDto mInitialRequestResponseDto1 = null;
int index = musicHolder.getIndex();
InitialResposeBean ini = new InitialResposeBean();
ini.setRadiolist(musicHolder.getItems());
mInitialRequestResponseDto1 = new InitialRequestResponseDto();
mInitialRequestResponseDto1.setInitialResposeBean(ini);
index--;
if (index == -1) {
index = mInitialRequestResponseDto1.getInitialResposeBean()
.getRadiolist().size() - 1;
}
time = mInitialRequestResponseDto1.getInitialResposeBean()
.getRadiolist().get(index).getTime_zone();
String[] s = time.split(" ");
TimeZone tz = TimeZone.getTimeZone("GMT" + s[0] + s[1]);
Calendar c = Calendar.getInstance(tz);
String caltime = c.get(Calendar.HOUR_OF_DAY) + "."
+ c.get(Calendar.MINUTE);
mRprgmname = Utills.getpname1(mInitialRequestResponseDto1,
index, caltime, Utills.getdayofweek());
}
} else {
Toast.makeText(mContext, "No Song In Holder", Toast.LENGTH_LONG)
.show();
}
if (mState == State.Stopped) {
Toast.makeText(mContext, "No Song In Holder", Toast.LENGTH_LONG)
.show();
}
}
protected void onDestroy() {
super.onDestroy();
Toast.makeText(mContext, "events ondestroy", Toast.LENGTH_SHORT).show();
mrelative=null;mPrgmName=null;mPrgmTxtVw=null;
mBack=null;
tf=null;
tf2=null;
mArrow=null;
mFm=null;
mHome=null;
mRelativeLayout=null;
mHeading=null;
lazyImageLoader=null;
mdialog=null;
intent=null;
serIntent=null;
songIcon=null;
title=null;
descrip=null;
mPreviousButton=null;
mNextButton=null;
mPlayButton=null;
mContext=null;
mInitialRequestResponseDto=null;
adapter=null;
mListview=null;
System.gc();
}
公共类事件活动扩展活动实现OnClickListener{
私有列表视图;
私有事件适配器;
InitialRequestResponsedToMinitialRequestResponsedTo;
语境;
私人图像按钮;
//私有图像按钮mRepeatButton;
私有图像按钮mnext按钮;
私有图像按钮MPPreviousButton;
//私有图像按钮mStopButton;
文本视图标题,描述;
图像视图图标;
布尔mBroadcastIsRegistered;
意图,严重性;
静态进程对话框mdialog;
LazyImageLoader LazyImageLoader;
私有静态int=0;
私有文本视图阅读;
建议的最后一个字符串\u URL=”http://www.vorbis.com/music/Epoq-Lepidoptera.ogg";
相对布局;
私有图像按钮mHome;
专用图像按钮mFm;
私有字符串langid;
私人影像;
字体tf,tf2;
私用钮扣;
字符串mRprgmname;
私有文本视图mPrgmTxtVw;
私有文本视图mPrgmName;
私人关系;
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mContext=这个;
setContentView(R.layout.commonsongslist);
mrrelative=(RelativeLayout)findViewById(R.id.Rlplayall);
title=(TextView)findViewById(R.id.songnamemaint);
songIcon=(ImageView)findViewById(R.id.cntrylogo);
mPrgmTxtVw=(TextView)findviewbyd(R.id.prmnametxt);
mPrgmName=(TextView)findViewById(R.id.prmname);
mBack=(按钮)findViewById(R.id.backs);
mHome=(ImageButton)findViewById(R.id.home);
mrrelativelayout=(RelativeLayout)findViewById(R.id.commonlayout);
mrrelativelayout.setBackgroundColor(Color.rgb(234183,51));
mListview=(ListView)findViewById(R.id.listsongs);
mHeading=(TextView)findViewById(R.id.txtheading);
mPlayButton=(ImageButton)findViewById(R.id.btnPlay);
mNextButton=(ImageButton)findViewById(R.id.nextbtn);
mPreviousButton=(ImageButton)findViewById(R.id.prvsbtn);
骨髓=(ImageView)findViewById(R.id.arrowimage);
setImageResource(R.drawable.events_a);
mFm=(图像按钮)findViewById(R.id.fmbtn);
Intent=getIntent();
langid=intent.getStringExtra(“languageid”);
lazyImageLoader=新的lazyImageLoader(mContext);
mHeading.setText(“事件”);
DisplayMetrics metrics=mContext.getResources().getDisplayMetrics();
//mHeading.setTextSize(20/量度,标度密度);
如果(度量值。标度密度<1){
mHeading.SettexSize(16);
}否则如果(metrics.scaledDensity>=2){
mHeading.SettexSize(16);
}否则如果(metrics.scaledDensity>=1&&metrics.scaledDensity<2){
mHeading.setTextSize(18/量度,标度密度);
}
Typeface tf=Typeface.createFromAsset(this.getAssets(),
“字体/Oswald Bold.ttf”);
mHeading.setTypeface(tf);
Typeface tf2=Typeface.createFromAsset(this.getAssets(),
“字体/arial.ttf”);
mBack.setTypeface(tf2);
mBack.setBackgroundResource(R.drawable.events_back);
mRprgmname=getIntent().getStringExtra(“名称”);
if(Utills.isNetworkAvailable(mContext)){
mPlayButton.setOnClickListener(此);
mNextButton.setOnClickListener(此);
mpPreviousButton.setOnClickListener(此);
}
mBack.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
onBackPressed();
}
});
mHome.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
LanguagesGetAsnchTask任务=新语言GetAsnChTask(
mContext,Constants.LANGUAGE_URL);
task.execute();
}
});
setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
无线电异步任务
task=newRadioAsynchTask(mContext、常数.通道、常数.语言\u URL、langid、,
mRprgmname);
task.execute();
}
});
MinitialRequestResponseTo=(InitialRequestResponseTo)getIntent()
.getSerializableExtra(“事件”);
适配器=新事件适配器(此,1,mInitialRequestResponseDto
.getInitialResposeBean().getEvitSdto());
mListview.setAdapter(适配器);
mListview.invalidate();
setOnItemClickListener(新的OnItemClickListener(){
公共链接(适配器视图arg0、视图arg1、内部位置、,
长arg3){
String title=mInitialRequestResponseDto
.getInitialResposeBean().GetEvitSdto().get(pos)
.getEvent_title();
字符串image=mInitialRequestResponseDto
.getInitialResposeBean().GetEvitSdto().get(pos)
.getEvent_poster();
String desc=mInitialRequestResponseDto
.getInitialResposeBean().GetEvitSdto().get(pos)
.getLong_desc();
意向意向=新意向(mContext,DetailedEvents.class);
intent.putExtra(“图像路径”,图像);
intent.putExtra(“languageid”,langid);
意图。额外(“说明”,描述);
意向。额外(“事件标题”,标题);
意图。putExtra(“名称”,mRprgmname);
星触觉(意向);
}
});
}
私有无效更新(意图服务意图){
如果(结束==1){
mPlayButton.setImageResource(R.drawable.play);
updateUI();
}
}
private BroadcastReceiver BroadcastReceiver=新的BroadcastReceiver(){
@凌驾
公共void onReceive(上下文上下文、意图serviceIntent){
EventsActivity.this.serIntent=servic
package com.onlineradio.adapters;
import java.util.List;
import android.content.Context;
import android.graphics.Typeface;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.onlineradio.Utils.LazyImageLoader;
import com.onlineradio.dto.EventsDto;
import com.siriinnovations.radiokhushi.R;
public class EventsAdapter extends ArrayAdapter<EventsDto> {
Context mContext;
EventsDto category;
public LazyImageLoader lazyImageLoader;
List<EventsDto> categories;
int selectedLanguage;
public EventsAdapter(Context context, int textViewResourceId,
List<EventsDto> list) {
super(context, textViewResourceId, list);
this.categories = list;
this.mContext = context;
lazyImageLoader = new LazyImageLoader(mContext.getApplicationContext());
}
@Override
public int getCount() {
return categories.size();
}
public EventsDto getItem(int position) {
return super.getItem(position);
}
@Override
public long getItemId(int position) {
return position;
}
public static class ViewHolder {
public TextView mEvntName;
public ImageView mImage;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View vi = convertView;
ViewHolder holder;
category = getItem(position);
// if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
vi = inflater.inflate(R.layout.event_row, parent, false);
holder = new ViewHolder();
holder.mEvntName = (TextView) vi.findViewById(R.id.eventname);
holder.mImage = (ImageView) vi.findViewById(R.id.eventimage);
vi.setTag(holder);
// } else {
// holder = (ViewHolder) vi.getTag();
// }
String title = categories.get(position).getEvent_title();
holder.mEvntName.setText(title);
Typeface tf = Typeface.createFromAsset(mContext.getAssets(),
"fonts/arial.ttf");
holder.mEvntName.setTypeface(tf);
DisplayMetrics metrics = mContext.getResources().getDisplayMetrics();
// holder.mEvntName.setTextSize(15 / metrics.scaledDensity);
if (metrics.scaledDensity < 1) {
holder.mEvntName.setTextSize(16);
} else if (metrics.scaledDensity >= 2) {
holder.mEvntName.setTextSize(14);
} else if (metrics.scaledDensity >= 1 && metrics.scaledDensity < 2) {
holder.mEvntName.setTextSize(18 / metrics.scaledDensity);
}
String imageurl = categories.get(position).getEvent_poster();
// holder.mImage.setImageBitmap(Utills.getBitmapFromURL(imageurl));
// new DownloadImageTask((ImageView) vi.findViewById(R.id.eventimage))
// .execute(imageurl);
// if ((imageurl == null) || imageurl.equalsIgnoreCase("null")) {
// holder.mImage.setVisibility(ImageView.GONE);
//
// } else {
lazyImageLoader.displayImage(imageurl, holder.mImage,
R.drawable.ic_launcher);
// holder.mImage.setLayoutParams(new ViewGroup.LayoutParams(
// WindowManager.LayoutParams.MATC`enter code here`H_PARENT,
// WindowManager.LayoutParams.WRAP_CONTENT));
// holder.mImage.setImageBitmap(Utills.getBitmapFromURL(imageurl));
holder.mImage.setTag(imageurl);
// holder.mImage.invalidate();
return vi;
}
}