Đây là những gì tôi đã tìm thấy về việc sử dụng context
:
1). Trong Activity
chính nó, sử dụng this
để tăng bố cục và menu, đăng ký menu ngữ cảnh, tiện ích khởi tạo, bắt đầu các hoạt động khác, tạo mới Intent
trong mộtActivity
, ưu tiên khởi tạo hoặc các phương thức khác có sẵn trong một Activity
.
Bố trí thổi phồng:
View mView = this.getLayoutInflater().inflate(R.layout.myLayout, myViewGroup);
Menu thổi phồng:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
this.getMenuInflater().inflate(R.menu.mymenu, menu);
return true;
}
Đăng ký menu ngữ cảnh:
this.registerForContextMenu(myView);
Tiện ích khởi tạo:
TextView myTextView = (TextView) this.findViewById(R.id.myTextView);
Bắt đầu một Activity
:
Intent mIntent = new Intent(this, MyActivity.class);
this.startActivity(mIntent);
Ưu tiên khởi tạo:
SharedPreferences mSharedPreferences = this.getPreferenceManager().getSharedPreferences();
2).Đối với lớp toàn ứng dụng, hãy sử dụng getApplicationContext()
làm bối cảnh này cho tuổi thọ của ứng dụng.
Lấy tên của gói Android hiện tại:
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;
}
}
Ràng buộc một lớp toàn ứng dụng:
Intent mIntent = new Intent(this, MyPersistent.class);
MyServiceConnection mServiceConnection = new MyServiceConnection();
if (mServiceConnection != null) {
getApplicationContext().bindService(mIntent, mServiceConnection, Context.BIND_AUTO_CREATE);
}
3). Đối với Người nghe và các loại lớp Android khác (ví dụ ContentObserver), hãy sử dụng thay thế Ngữ cảnh như:
mContext = this; // Example 1
mContext = context; // Example 2
ở đâu this
haycontext
là bối cảnh của một lớp (Hoạt động, v.v.).
Activity
thay thế bối cảnh:
public class MyActivity extends Activity {
private Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;
}
}
Thay thế ngữ cảnh người nghe:
public class MyLocationListener implements LocationListener {
private Context mContext;
public MyLocationListener(Context context) {
mContext = context;
}
}
ContentObserver
thay thế bối cảnh:
public class MyContentObserver extends ContentObserver {
private Context mContext;
public MyContentObserver(Handler handler, Context context) {
super(handler);
mContext = context;
}
}
4) . Dành choBroadcastReceiver
(bao gồm cả phần thu được nhúng / nhúng), hãy sử dụng bối cảnh riêng của người nhận.
Bên ngoài 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);
}
}
}
Inline / 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). Đối với Dịch vụ, hãy sử dụng bối cảnh riêng của dịch vụ.
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). Đối với bánh mì nướng, thường sử dụnggetApplicationContext()
, nhưng nếu có thể, hãy sử dụng bối cảnh được truyền từ Hoạt động, Dịch vụ, v.v.
Sử dụng bối cảnh của ứng dụng:
Toast mToast = Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG);
mToast.show();
Sử dụng bối cảnh được truyền từ một nguồn:
public static void showLongToast(Context context, String message) {
if (context != null && message != null) {
Toast mToast = Toast.makeText(context, message, Toast.LENGTH_LONG);
mToast.show();
}
}
Và cuối cùng, không sử dụng getBaseContext()
theo lời khuyên của các nhà phát triển khung của Android.
CẬP NHẬT: Thêm ví dụ về Context
việc sử dụng.