คำถามติดแท็ก android-context

เชื่อมต่อกับข้อมูลส่วนกลางเกี่ยวกับสภาพแวดล้อมแอปพลิเคชัน

30
'บริบท' บน Android คืออะไร
ในการเขียนโปรแกรม Android Contextคลาสคืออะไรและใช้ทำอะไร? ฉันอ่านเกี่ยวกับเว็บไซต์นักพัฒนาแต่ฉันไม่สามารถเข้าใจได้อย่างชัดเจน

20
วิธีแบบคงที่จะได้รับ 'บริบท' ใน Android?
มีวิธีรับContextอินสแตนซ์ปัจจุบันในวิธีการคงที่หรือไม่ ฉันกำลังมองหาวิธีนี้เพราะฉันเกลียดการบันทึกอินสแตนซ์ 'บริบท' ทุกครั้งที่มีการเปลี่ยนแปลง

7
"เครื่องมือ: บริบท" ในไฟล์เลย์เอาต์ของ Android คืออะไร
เริ่มจาก ADT เวอร์ชั่นใหม่เมื่อเร็ว ๆ นี้ฉันสังเกตเห็นว่าแอททริบิวใหม่นี้ในไฟล์ XML ของเลย์เอาต์ตัวอย่างเช่น <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" tools:context=".MainActivity" /> "เครื่องมือ: บริบท" ใช้ทำอะไร มันจะรู้เส้นทางที่แน่นอนไปยังกิจกรรมที่เขียนที่นั่นได้อย่างไร มันดูแพคเกจของแอพพลิเคชั่นหรือไม่? มีการ จำกัด คลาสที่ขยายบริบทหรือกิจกรรมเท่านั้นหรือไม่ มันสามารถใช้งานได้สำหรับรายการ ListView ฯลฯ ?

27
กล่องโต้ตอบการขว้าง "ไม่สามารถเพิ่มหน้าต่าง - โทเค็น null ไม่ได้สำหรับแอปพลิเคชัน" ที่มี getApplication () เป็นบริบท
กิจกรรมของฉันพยายามสร้าง AlertDialog ซึ่งต้องใช้บริบทเป็นพารามิเตอร์ ทำงานได้ตามที่คาดไว้หากฉันใช้: AlertDialog.Builder builder = new AlertDialog.Builder(this); อย่างไรก็ตามฉันมักจะใช้ "สิ่งนี้" เป็นบริบทเนื่องจากมีโอกาสเกิดการรั่วไหลของหน่วยความจำเมื่อกิจกรรมถูกทำลายและสร้างใหม่แม้ในช่วงที่เรียบง่ายเช่นการหมุนหน้าจอ จากโพสต์ที่เกี่ยวข้องในบล็อกของนักพัฒนา Android : มีสองวิธีง่าย ๆ ในการหลีกเลี่ยงการรั่วไหลของหน่วยความจำที่เกี่ยวข้องกับบริบท สิ่งที่ชัดเจนที่สุดคือการหลีกเลี่ยงบริบทที่อยู่นอกขอบเขตของตัวเอง ตัวอย่างด้านบนแสดงกรณีของการอ้างอิงแบบสแตติก แต่คลาสภายในและการอ้างอิงโดยนัยของคลาสภายนอกอาจเป็นอันตรายอย่างเท่าเทียมกัน โซลูชันที่สองคือการใช้บริบทของแอปพลิเคชัน บริบทนี้จะมีชีวิตอยู่ตราบใดที่ใบสมัครของคุณยังมีชีวิตอยู่และไม่ได้ขึ้นอยู่กับวงจรชีวิตของกิจกรรม หากคุณวางแผนที่จะรักษาวัตถุที่มีอายุการใช้งานยาวนานซึ่งต้องการบริบทให้จดจำแอปพลิเคชันวัตถุ คุณสามารถรับมันได้อย่างง่ายดายโดยการเรียก Context.getApplicationContext () หรือ Activity.getApplication () แต่สำหรับAlertDialog()ทั้งgetApplicationContext()หรือgetApplication()ยอมรับว่าเป็นบริบทตามที่มันโยนข้อยกเว้น: "ไม่สามารถเพิ่มหน้าต่าง - โทเค็น null ไม่ได้สำหรับแอปพลิเคชัน" ต่อการอ้างอิง: 1 , 2 , 3 , ฯลฯ ดังนั้นสิ่งนี้ควรได้รับการพิจารณาว่าเป็น "บั๊ก" เนื่องจากเราได้รับคำแนะนำให้ใช้อย่างเป็นทางการActivity.getApplication()แต่มันก็ไม่ทำงานตามที่โฆษณาไว้? จิม

30
ใช้บริบทในส่วน
ฉันจะรับบริบทเป็นส่วนย่อยได้อย่างไร ฉันต้องใช้ฐานข้อมูลของฉันซึ่งคอนสตรัคเตอร์ใช้ในบริบท แต่getApplicationContext()และFragmentClass.thisไม่ทำงานฉันต้องทำอย่างไร ตัวสร้างฐานข้อมูล public Database(Context ctx) { this.context = ctx; DBHelper = new DatabaseHelper(context); }

8
ความแตกต่างระหว่าง getContext (), getApplicationContext (), getBaseContext () และ“ this”
ความแตกต่างระหว่างคืออะไรgetContext(), getApplicationContext(), getBaseContext()และ " this"? แม้ว่านี่เป็นคำถามง่าย ๆ ที่ฉันไม่สามารถเข้าใจความแตกต่างพื้นฐานระหว่างพวกเขา โปรดยกตัวอย่างง่ายๆถ้าเป็นไปได้

9
ใช้บริบทของแอปพลิเคชันทุกที่หรือไม่
ในแอพ Android มีอะไรผิดปกติกับวิธีการต่อไปนี้: public class MyApp extends android.app.Application { private static MyApp instance; public MyApp() { instance = this; } public static Context getContext() { return instance; } } และส่งผ่านทุกที่ (เช่น SQLiteOpenHelper) ที่จำเป็นต้องใช้บริบท (และไม่รั่วแน่นอน)?

4
getApplication () กับ getApplicationContext ()
ฉันไม่สามารถหาคำตอบที่น่าพอใจได้ดังนั้นเราไปที่: จัดการกับอะไรActivity/Service.getApplication()และContext.getApplicationContext()? ในแอปพลิเคชันของเราทั้งคู่จะส่งคืนวัตถุเดียวกัน ActivityTestCaseอย่างไรก็ตามในการเยาะเย้ยแอปพลิเคชันจะgetApplication()กลับมาพร้อมกับการเยาะเย้ย แต่getApplicationContextจะยังคงกลับตัวอย่างบริบทที่แตกต่างกัน (หนึ่งฉีดโดย Android) นั่นเป็นข้อบกพร่องหรือไม่? มันตั้งใจหรือไม่ ฉันไม่เข้าใจความแตกต่างตั้งแต่แรก มีกรณีนอกชุดทดสอบที่การโทรทั้งสองอาจกลับมาพร้อมกับวัตถุที่แตกต่างกันหรือไม่? เมื่อใดและเพราะเหตุใด ยิ่งไปกว่านั้นคือเหตุผลที่getApplicationกำหนดไว้บนActivityและServiceแต่ไม่ได้อยู่Context? ไม่ควรมีอินสแตนซ์แอปพลิเคชันที่ใช้ได้จากทุกที่ใช่หรือไม่

8
ความแตกต่างระหว่างวิธีการต่างๆในการรับบริบทคืออะไร
ในส่วนต่าง ๆ ของรหัส Android ฉันได้เห็น: public class MyActivity extends Activity { public void method() { mContext = this; // since Activity extends Context mContext = getApplicationContext(); mContext = getBaseContext(); } } อย่างไรก็ตามฉันไม่สามารถหาคำอธิบายที่เหมาะสมซึ่งเป็นที่ต้องการและภายใต้สถานการณ์ที่ควรใช้ ตัวชี้ไปยังเอกสารเกี่ยวกับเรื่องนี้และคำแนะนำเกี่ยวกับสิ่งที่อาจแตกถ้าเลือกผิดจะได้รับการชื่นชมมาก

24
การเรียก startActivity () จากด้านนอกของบริบทกิจกรรม
ฉันใช้งานListViewแอปพลิเคชัน Android ของฉันแล้ว ฉันผูกกับสิ่งนี้ListViewโดยใช้คลาสย่อยที่กำหนดเองของArrayAdapterชั้นเรียน ภายในแทนที่วิธีการที่ผมกำหนดArrayAdapter.getView(...) OnClickListenerในonClickวิธีการOnClickListenerฉันต้องการเปิดกิจกรรมใหม่ ฉันได้รับการยกเว้น: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? ฉันจะทราบได้อย่างไรContextว่าListView(ปัจจุบันActivity) ทำงานภายใต้

12
จะรับชื่อแพ็คเกจได้จากที่ไหน?
ฉันทราบถึงความพร้อมใช้งานของContext.getApplicationContext ()และView.getContext ()ซึ่งฉันสามารถเรียกContext.getPackageName ()เพื่อดึงชื่อแพ็คเกจของแอปพลิเคชันได้ พวกเขาทำงานถ้าฉันโทรจากวิธีการที่ a ViewหรือActivityวัตถุที่มีอยู่ แต่ถ้าฉันต้องการค้นหาชื่อแพคเกจจากคลาสอิสระทั้งหมดโดยไม่มีViewหรือActivityมีวิธีทำ (โดยตรงหรือโดยอ้อม)?

7
เมื่อใดที่จะเรียกบริบทของกิจกรรมหรือบริบทของแอปพลิเคชัน
มีการโพสต์เกี่ยวกับบริบทสองอย่างนี้มากมาย แต่ฉันยังไม่เข้าใจ ตามที่ฉันเข้าใจแล้ว: แต่ละตัวอย่างของคลาสซึ่งหมายความว่าโปรแกรมเมอร์บางคนแนะนำให้คุณใช้this.getApplicationContext()บ่อยที่สุดเท่าที่จะทำได้เพื่อไม่ให้ "รั่วไหล" หน่วยความจำใด ๆ เนื่องจากอื่น ๆthis(รับActivityบริบทของอินสแตนซ์) ชี้ไปActivityที่ถูกทำลายทุกครั้งที่ผู้ใช้เอียงโทรศัพท์หรือออกจากแอพ ฯลฯ ซึ่งเห็นได้ชัดว่า Garbage Collector (GC) ไม่จับและใช้หน่วยความจำมากเกินไป .. แต่ทุกคนสามารถมาด้วยตัวอย่างการเขียนโค้ดที่ดีจริง ๆ ซึ่งมันเป็นสิ่งที่ถูกต้องที่จะใช้this(รับบริบทของActivityอินสแตนซ์ปัจจุบัน) และบริบทของแอปพลิเคชันจะไร้ประโยชน์ / ผิด

13
getString นอกบริบทหรือกิจกรรม
ฉันได้พบสิ่งที่ยอดเยี่ยมR.stringมากสำหรับการป้องกันรหัส hardcoded และฉันต้องการใช้มันในคลาสยูทิลิตี้ที่ทำงานกับรุ่นในแอปพลิเคชันของฉันเพื่อสร้างผลลัพธ์ ตัวอย่างเช่นในกรณีนี้ฉันกำลังสร้างอีเมลจากโมเดลภายนอกกิจกรรม มันเป็นไปได้ที่จะใช้getStringที่อยู่นอกContextหรือActivity ? ฉันคิดว่าฉันสามารถผ่านในกิจกรรมปัจจุบัน แต่ดูเหมือนว่าไม่จำเป็น โปรดแก้ไขให้ฉันถ้าฉันผิด! แก้ไข: เราสามารถเข้าถึงทรัพยากรโดยไม่ใช้Contextหรือไม่

7
ความแตกต่างระหว่างบริบทของกิจกรรมและบริบทของแอปพลิเคชัน
สิ่งนี้ทำให้ฉันนิ่งงันฉันใช้สิ่งนี้กับ Android 2.1-r8 SDK: ProgressDialog.show(getApplicationContext(), ....); และใน Toast t = Toast.makeText(getApplicationContext(),....); ใช้getApplicationContext()ล่มทั้งสองProgressDialogและToast.... ซึ่งทำให้ฉันคำถามนี้: อะไรคือความแตกต่างที่เกิดขึ้นจริงระหว่างบริบทของกิจกรรมและบริบทของแอปพลิเคชันแม้จะแบ่งปันคำว่า 'บริบท'

14
getActivity () ส่งคืนค่า null ในฟังก์ชัน Fragment
ฉันมีแฟรกเมนต์ (F1) ด้วยวิธีสาธารณะเช่นนี้ public void asd() { if (getActivity() == null) { Log.d("yes","it is null"); } } และใช่เมื่อฉันเรียกมันว่า (จากกิจกรรม) มันเป็นโมฆะ ... FragmentTransaction transaction1 = getSupportFragmentManager().beginTransaction(); F1 f1 = new F1(); transaction1.replace(R.id.upperPart, f1); transaction1.commit(); f1.asd(); ต้องเป็นสิ่งที่ฉันทำผิดมาก แต่ฉันไม่รู้ว่ามันคืออะไร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.