ความหมายของ Context
Context (บริบท) ใน Android คืออินเทอร์เฟซที่ให้ข้อมูลเกี่ยวกับสภาพแวดล้อมของแอปพลิเคชัน ปัจจุบัน มันคือ "ประตู" สู่ระบบ Android ที่ช่วยให้เข้าถึงทรัพยากรและบริการต่างๆ ได้
ประเภทของ Context หลัก 2 แบบ
| ประเภท | 來源 | อายุการใช้งาน (Lifecycle) | ใช้เมื่อไหร่ |
|---|---|---|---|
| Application Context | getApplicationContext() | ตลอดชีวิตแอป (Process lifecycle) | Singleton, Service, Library, Static reference |
| Activity Context | this (ใน Activity), getBaseContext() | ตาม Activity Lifecycle | UI, Dialog, View, LayoutInflater, Start Activity |
ขั้นตอนที่ 1: สร้างโปรเจกต์ใหม่
สร้างโปรเจกต์ Android ใหม่ใน Android Studio
ขั้นตอนที่ 2: จัดทำ Layout (activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/linearLayout"
android:orientation="vertical"
android:padding="16sp"
tools:context=".MainActivity">
</LinearLayout>
ขั้นตอนที่ 3: เขียนโค้ด MainActivity.java
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout linearLayout = findViewById(R.id.linearLayout);
// ใช้ Application Context
TextView textViewContext = new TextView(getApplicationContext());
textViewContext.setTextSize(30);
textViewContext.setText("Application Context");
textViewContext.setTextColor(Color.RED);
// ใช้ Activity Context (this)
TextView textViewActivityContext = new TextView(this);
textViewActivityContext.setTextSize(30);
textViewActivityContext.setText("Activity Context");
linearLayout.addView(textViewContext);
linearLayout.addView(textViewActivityContext);
}
}
สรุปการใช้งาน Context ที่พบบ่อย
- new View(Context) - สร้าง View ใหม่
- LayoutInflater.from(Context) - ฟู้ง Layout XML
- context.getString(R.string.xxx) - ดึงสตริงจาก resources
- context.getResources() - เข้าถึงทรัพยากร
- context.getSystemService() - เข้าถึงบริการระบบ (Location, Alarm, Notification)
- context.startActivity() - เปิด Activity ใหม่
- context.sendBroadcast() - ส่ง Broadcast
- SharedPreferences - บันทึกข้อมูลเล็กๆ
- Database, File I/O - openOrCreateDatabase, getFilesDir()
ข้อผิดพลาดที่พบบ่อย: Memory Leak
// ❌ ผิด - เก็บ Activity Context ใน static field
static Context context;
@Override
onCreate() { context = this; }
// ✅ ถูก - ใช้ Application Context
static Context appContext;
@Override
onCreate() { appContext = getApplicationContext(); }
การทดสอบ
รันแอป จะแสดง TextView 2 บรรทัด: "Application Context" (สีแดง) และ "Activity Context"