In meinem Projekt habe ich diese Situation. Dies ist ein Teil meines MainActivity
, ich das Objekt initialisiert helperClass
mit dem applicationContext
und machte es statisch, weil ich es zu benutzen, in der OnClickListener
einer Taste:Wie verwende ich eine Klasse mit einem Kontextargument in einem statischen Kontext, ohne ein Speicherleck zu verursachen?
public class MainActivity {
public static HelperClass helperClass;
@Override
protected void onCreate(Bundle savedInstanceState) {
helperClass = new HelperClass(getApplicationContext());
{...}
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
helperClass.doSomething();
}
});
}
}
Dies ist ein Teil der Hilfsklasse ist, ich brauche den Kontext, weil ich einige Daten in der App-Speicher zu speichern haben:
public class HelperClass{
private Context context;
public HelperClass(Context context) {
this.context = context;
}
public void doSomething() {
File file = new File(context.getFilesDir(), "name");
{...}
}
}
nun diesen Code funktioniert, aber wenn ich helperClass
erklären statisch gibt es eine Warnung sagen, dies ist ein Speicherleck; Ich habe versucht, den Kontext aus der HelperClass
zu entfernen, aber ich konnte den Kontext nicht aus der Klasse abrufen; Ich habe auch versucht, die statische Deklaration zu entfernen, aber ich brauche es, weil der OnClickListener
ein statischer Kontext ist.
Ich lese here, dass ich ApplicationContext
verwenden kann, es ist in Ordnung, aber es ist ein alter Artikel.
Gibt es eine bessere Lösung?
Wenn ich das static-Schlüsselwort entfernt, heißt es, dass nicht-statische FeldhelferClass nicht aus einem statischen Kontext verwiesen werden kann. – Darcar90
@ Darcar90 von dem Code, den Sie veröffentlicht haben, dies ist die richtige Lösung und sollte funktionieren. Machst du irgendwelche anderen statischen Referenzen, die du uns nicht gezeigt hast? – brandall
@ Darcar90 bitte posten Sie den Code, der diesen Fehler verursacht –