Folgendes habe ich in Bezug auf die Verwendung von gefunden context
:
1). Activity
Verwenden Sie in einem selbst das this
Aufblasen von Layouts und Menüs, das Registrieren von Kontextmenüs, das Instanziieren von Widgets, das Starten anderer Aktivitäten, das Erstellen neuer Aktivitäten Intent
in einem Activity
, das Instanziieren von Einstellungen oder andere in einem verfügbare Methoden Activity
.
Layout aufblasen:
View mView = this.getLayoutInflater().inflate(R.layout.myLayout, myViewGroup);
Menü aufblasen:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
this.getMenuInflater().inflate(R.menu.mymenu, menu);
return true;
}
Kontextmenü registrieren:
this.registerForContextMenu(myView);
Widget instanziieren:
TextView myTextView = (TextView) this.findViewById(R.id.myTextView);
Starten Sie eine Activity
:
Intent mIntent = new Intent(this, MyActivity.class);
this.startActivity(mIntent);
Präferenzen instanziieren:
SharedPreferences mSharedPreferences = this.getPreferenceManager().getSharedPreferences();
2). Verwenden Sie für anwendungsweite Klassen, getApplicationContext()
da dieser Kontext für die Lebensdauer der Anwendung vorhanden ist.
Rufen Sie den Namen des aktuellen Android-Pakets ab:
public class MyApplication extends Application {
public static String getPackageName() {
String packageName = null;
try {
PackageInfo mPackageInfo = getApplicationContext().getPackageManager().getPackageInfo(getApplicationContext().getPackageName(), 0);
packageName = mPackageInfo.packageName;
} catch (NameNotFoundException e) {
// Log error here.
}
return packageName;
}
}
Binden Sie eine anwendungsweite Klasse:
Intent mIntent = new Intent(this, MyPersistent.class);
MyServiceConnection mServiceConnection = new MyServiceConnection();
if (mServiceConnection != null) {
getApplicationContext().bindService(mIntent, mServiceConnection, Context.BIND_AUTO_CREATE);
}
3) . Verwenden Sie für Listener und andere Arten von Android-Klassen (z. B. ContentObserver) eine Kontextsubstitution wie:
mContext = this; // Example 1
mContext = context; // Example 2
wo this
oder context
ist der Kontext einer Klasse (Aktivität usw.).
Activity
Kontextsubstitution:
public class MyActivity extends Activity {
private Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;
}
}
Listener-Kontextsubstitution:
public class MyLocationListener implements LocationListener {
private Context mContext;
public MyLocationListener(Context context) {
mContext = context;
}
}
ContentObserver
Kontextsubstitution:
public class MyContentObserver extends ContentObserver {
private Context mContext;
public MyContentObserver(Handler handler, Context context) {
super(handler);
mContext = context;
}
}
4). BroadcastReceiver
Verwenden Sie für (einschließlich Inline- / Embedded-Empfänger) den eigenen Kontext des Empfängers.
Extern BroadcastReceiver
:
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (action.equals(Intent.ACTION_SCREEN_OFF)) {
sendReceiverAction(context, true);
}
private static void sendReceiverAction(Context context, boolean state) {
Intent mIntent = new Intent(context.getClass().getName() + "." + context.getString(R.string.receiver_action));
mIntent.putExtra("extra", state);
context.sendBroadcast(mIntent, null);
}
}
}
Inlined / Embedded BroadcastReceiver
:
public class MyActivity extends Activity {
private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final boolean connected = intent.getBooleanExtra(context.getString(R.string.connected), false);
if (connected) {
// Do something.
}
}
};
}
5). Verwenden Sie für Dienste den eigenen Kontext des Dienstes.
public class MyService extends Service {
private BroadcastReceiver mBroadcastReceiver;
@Override
public void onCreate() {
super.onCreate();
registerReceiver();
}
private void registerReceiver() {
IntentFilter mIntentFilter = new IntentFilter();
mIntentFilter.addAction(Intent.ACTION_SCREEN_OFF);
this.mBroadcastReceiver = new MyBroadcastReceiver();
this.registerReceiver(this.mBroadcastReceiver, mIntentFilter);
}
}
6). Verwenden Sie für Toasts im Allgemeinen getApplicationContext()
, aber verwenden Sie nach Möglichkeit den Kontext, der von einer Aktivität, einem Dienst usw. übergeben wurde.
Verwenden Sie den Kontext der Anwendung:
Toast mToast = Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG);
mToast.show();
Verwenden Sie den von einer Quelle übergebenen Kontext:
public static void showLongToast(Context context, String message) {
if (context != null && message != null) {
Toast mToast = Toast.makeText(context, message, Toast.LENGTH_LONG);
mToast.show();
}
}
Und zuletzt nicht getBaseContext()
wie von den Framework-Entwicklern von Android empfohlen verwenden.
UPDATE: Fügen Sie Context
Anwendungsbeispiele hinzu.