我的应用有两个“重”片段。当我在它们之间移动时,每次分配内存~40mb。同时他们没有大的位图或类似的东西。每次垃圾收集器释放一小部分内存~10mb。我的问题是我做了什么来防止分配内存或释放它?
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
onCreateCreator();
name_text = (TextView) getView().findViewById(R.id.info_title);
artist_text = (TextView) getView().findViewById(R.id.info_artist);
info_duration = (TextView) getView().findViewById(R.id.info_duration);
crossfade_duration = (TextView) getView().findViewById(R.id.crossfade_duration_text);
crossfade_duration.setOnClickListener(this);
increase_duration = (TextView) getView().findViewById(R.id.increase_duration_text);
increase_duration.setOnClickListener(this);
fading_duration = (TextView) getView().findViewById(R.id.fading_duration_text);
crossfade_switch = (Switch) getView().findViewById(R.id.crossfade_switch);
crossfade_switch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (!b) {
fading_switch.setChecked(false);
}
fading_switch.setEnabled(b);
}
});
fading_switch = (Switch) getView().findViewById(R.id.fading_switch);
increase_switch = (Switch) getView().findViewById(R.id.increase_switch);
save = (Button) getView().findViewById(R.id.save);
save.setOnClickListener(this);
save_to_playlist = (Button) getView().findViewById(R.id.save_to_playlist);
save_to_playlist.setOnClickListener(this);
cover = (ImageView) getView().findViewById(R.id.info_cover);
skip = (RelativeLayout) getView().findViewById(R.id.skip_layout);
skip.setOnClickListener(this);
if (MODE == MODE_SINGLE) {
skip.setVisibility(View.GONE);
fill(track);
}
else {
skip.setVisibility(View.VISIBLE);
fill(tracks.get(0));
}
}
private void fill(Track track){
this.track = track;
cover.setImageBitmap(default_cover);
int end_millis = Integer.valueOf(Settings.getMetadata(track.getPath(), MediaMetadataRetriever.METADATA_KEY_DURATION));
name_text.setText(track.getName());
artist_text.setText(track.getArtist());
info_duration.setText(getResources().getString(R.string.info_duration) + ": " + Settings.getUserInterfaceDuration(end_millis, true, false));
if (task != null) task.cancel(true);
task = new MyTask(cover);
task.execute(track);
crossfade_duration.setText(String.valueOf(Settings.CROSSFADE_START));
fading_duration.setText(String.valueOf(Settings.CROSSFADE_START));
increase_duration.setText("0");
fading_switch.setEnabled(false);
fading_switch.setChecked(track.isFading());
if (track.isMegamixTrack()){
if (track.getCrossfadeDuration() > 1000){
crossfade_switch.setChecked(true);
crossfade_duration.setText(String.valueOf(track.getCrossfadeDuration()));
fading_duration.setText(String.valueOf(track.getCrossfadeDuration()));
}
if (track.getIncrease() > 0){
increase_switch.setChecked(true);
increase_duration.setText(String.valueOf(track.getIncrease()));
}
} else{
crossfade_switch.setChecked(false);
increase_switch.setChecked(false);
}
}