Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

Context ใน Android คืออะไร และการใช้งาน

ความหมายของ Context

Context (บริบท) ใน Android คืออินเทอร์เฟซที่ให้ข้อมูลเกี่ยวกับสภาพแวดล้อมของแอปพลิเคชัน ปัจจุบัน มันคือ "ประตู" สู่ระบบ Android ที่ช่วยให้เข้าถึงทรัพยากรและบริการต่างๆ ได้

ประเภทของ Context หลัก 2 แบบ

ประเภท來源อายุการใช้งาน (Lifecycle)ใช้เมื่อไหร่
Application ContextgetApplicationContext()ตลอดชีวิตแอป (Process lifecycle)Singleton, Service, Library, Static reference
Activity Contextthis (ใน Activity), getBaseContext()ตาม Activity LifecycleUI, 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"