Meine einfache Aktivität hat eine Listenansicht mit 14 Elementen (Genre). Wenn ich die App starte, bekomme ich den Snapshot und normalerweise sind 1 GenreSelectionActivity und 14 Genre im Speicher. dann gehe ich zu anderen Aktivitäten und gehe zurück, es gibt 2 GenreauswahlAktivität und 28 Genre. die Hälfte von ihnen ist rot gefärbt, bedeutet in FinalizerReferenz. dann wird dieselbe Navigation ausgeführt, es wird 3 - 42 und so weiter. ist es normales Verhalten des Finalizers?Android Finalizer endet nie und sammelt alte Objekte, ist es normal?
ich versuche, „System.exit (0)“ zu rufen, wird dabei alte Aktivität gereinigt, aber ein lästiger schwarzer Bildschirm erscheint beim Übergang.
public class GenreSelectionActivity extends Activity {
Activity activity;
ListView listViewGenre;
GenreList genreList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.genre_list);
activity = this;
createGenrePlayButton();
listViewGenre = (ListView) findViewById(R.id.listGenre);
JSONObject jsonResponseGenres = s.readInternalStoragePrivate(Constants.GENRE_FILE_NAME, getApplicationContext());
JsonResolver jsonResolver = new JsonResolver();
genreList = jsonResolver.getGenreListWithPhasesFromJson(jsonResponseGenres);
final GenreCircularAdapter genreCircularAdapter = new GenreCircularAdapter(activity, R.layout.genre_row, genreList);
listViewGenre.setAdapter(genreCircularAdapter);
listViewGenre.setSelectionFromTop(genreCircularAdapter.MIDDLE, 0);
}
public void createGenrePlayButton() {
ImageView genrePlayButton = (ImageView) findViewById(R.id.genrePlayButton);
genrePlayButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View view) {
Intent questPage = new Intent(activity, QuestionManagerActivity.class);
questPage.putExtra("genre_name", "pop");
Phase selectedPhaseData = new Phase();
selectedPhaseData.setHighScore(0);
questPage.putExtra("selected_phase_data", selectedPhaseData);
activity.startActivity(questPage);
activity.finish();
//System.exit(0);
}
});
}
}
dies ist die Adapter i verwenden:
public class GenreCircularAdapter extends ArrayAdapter<Genre> {
private GenreList genreList;
private Activity activity;
LayoutInflater inflater;
public static final int HALF_MAX_VALUE = Constants.GENRE_CIRCULAR_LISTVIEW_SIZE/2;
public final int MIDDLE;
public GenreCircularAdapter(Activity activity, int resource, GenreList genreList) {
super(activity, resource, genreList);
this.genreList = genreList;
this.activity = activity;
inflater = LayoutInflater.from(activity);
MIDDLE = HALF_MAX_VALUE - HALF_MAX_VALUE % genreList.size();
}
@Override
public int getCount() {
return Constants.GENRE_CIRCULAR_LISTVIEW_SIZE;
}
@Override
public Genre getItem(int position) {
return genreList.get(position % genreList.size());
}
@Override
public long getItemId(int position) {
return genreList.get(position % genreList.size()).getId();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder genreRowHolder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.genre_row, parent, false);
genreRowHolder = new ViewHolder();
genreRowHolder.attachChildViews(convertView);
convertView.setTag(genreRowHolder);
} else
genreRowHolder = (ViewHolder) convertView.getTag();
Genre genre = getItem(position);
genreRowHolder.genreName.setText(genre.getName());
try {
int genreImageResID = activity.getResources().getIdentifier(String.valueOf("genre_" + genre.getId()), "drawable", activity.getPackageName());
genreRowHolder.genreImageView.setImageDrawable(activity.getResources().getDrawable(genreImageResID));
genreRowHolder.genreImageView.setColorFilter(0x96064e66, PorterDuff.Mode.SRC_ATOP);
} catch (Exception e){
Log.e("img_not_found", "genre_" + genre.getId() + " - " + getClass().getSimpleName());
}
return convertView;
}
private static class ViewHolder {
public TextView genreName;
public ImageView genreImageView;
public ImageView genreLockImageView;
public void attachChildViews (View convertView) {
genreName = (TextView) convertView.findViewById(R.id.genreName);
genreImageView = (ImageView) convertView.findViewById(R.id.genreImageView);
genreLockImageView = (ImageView) convertView.findViewById(R.id.genreLockImage);
}
}
}