เป็นวิธีปฏิบัติที่ดีในการโหลดซ้ำActivity
ในAndroidหรือไม่
อะไรจะเป็นวิธีที่ดีที่สุดที่จะทำ? this.finish
แล้วthis.startActivity
กับกิจกรรมIntent
?
เป็นวิธีปฏิบัติที่ดีในการโหลดซ้ำActivity
ในAndroidหรือไม่
อะไรจะเป็นวิธีที่ดีที่สุดที่จะทำ? this.finish
แล้วthis.startActivity
กับกิจกรรมIntent
?
คำตอบ:
คุณสามารถใช้
finish();
startActivity(getIntent());
เพื่อรีเฟรชActivity
จากภายใน
สำหรับผู้ที่ไม่ต้องการที่จะเห็นว่ากระพริบตาหลังจากสร้างใหม่ ()วิธีการเพียงแค่ใช้
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);
นี่คือสิ่งที่ฉันทำเพื่อโหลดกิจกรรมใหม่หลังจากเปลี่ยนกลับจากการเปลี่ยนแปลงค่ากำหนด
@Override
protected void onResume() {
super.onResume();
this.onCreate(null);
}
สิ่งนี้จะทำให้กิจกรรมวาดตัวเองเป็นหลัก
อัปเดต: วิธีที่ดีกว่าในการทำเช่นนี้คือการเรียกrecreate()
วิธีการ สิ่งนี้จะทำให้กิจกรรมถูกสร้างใหม่
ฉันเห็นคำตอบก่อนหน้าซึ่งได้รับการบรรจุกิจกรรมใหม่โดยใช้ Intent สิ่งเหล่านี้จะใช้ได้ แต่คุณยังสามารถทำเช่นเดียวกันโดยใช้วิธีการสร้างใหม่ () ที่กำหนดไว้ในคลาสกิจกรรม
แทนที่จะเขียนสิ่งนี้
// รีเฟรชกิจกรรมหลักเมื่อปิดกล่องโต้ตอบ
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish();
สามารถทำได้โดยการเขียนแค่นี้เท่านั้น
recreate();
recreate()
เป็นวิธีแก้ปัญหาสำหรับฉัน - "เริ่มต้นใหม่" กิจกรรมไม่ทำงานสำหรับฉันเนื่องจากฉันเริ่มต้นกิจกรรมโดยใช้ "StartActivityForResult" และทำให้พฤติกรรมขัดข้อง
เพียงใช้
this.recreate();
สิ่งนี้จะทริกเกอร์วิธี onCreate ในกิจกรรม
ฉันต้องการอัปเดตรายการข้อความในแอปพลิเคชันของฉันอย่างเร่งรีบดังนั้นฉันจึงทำการรีเฟรชกิจกรรม UI หลักของฉันก่อนที่จะปิดกล่องโต้ตอบที่ฉันเข้าฉันแน่ใจว่ามีวิธีที่ดีกว่าในการทำสิ่งนี้ให้สำเร็จ
// Refresh main activity upon close of dialog box
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish(); //
Android มีระบบการจัดการกระบวนการที่จัดการการสร้างและการทำลายกิจกรรมซึ่งส่วนใหญ่ไม่เห็นประโยชน์ใด ๆ ที่คุณเห็นจากการรีสตาร์ทกิจกรรมด้วยตนเอง คุณสามารถดูข้อมูลเพิ่มเติมได้ที่Application Fundamentals
แนวปฏิบัติที่ดีคือการทำให้แน่ใจว่าวิธี onPause และ onStop ของคุณปล่อยทรัพยากรใด ๆ ที่คุณไม่จำเป็นต้องใช้และใช้onLowMemoryเพื่อลดกิจกรรมของคุณให้เหลือน้อยที่สุด
เริ่มต้นด้วยความตั้งใจเดียวกันและใกล้ชิดactivity
activity
Intent refresh = new Intent(this, Main.class);
startActivity(refresh);//Start the same Activity
finish(); //finish Activity.
ในบางกรณีการฝึกฝนที่ดีที่สุดไม่ใช่ความคิดที่ดีที่บริบทขับเคลื่อนหากคุณเลือกที่จะใช้สิ่งต่อไปนี้เป็นวิธีที่ดีที่สุดในการถ่ายทอดจากกิจกรรมไปสู่ลูกชายของเธอ:
Intent i = new Intent(myCurrentActivityName.this,activityIWishToRun.class);
startActivityForResult(i, GlobalDataStore.STATIC_INTEGER_VALUE);
สิ่งที่เกิดขึ้นคือเมื่อใดก็ตามที่คุณเสร็จสิ้น () จาก activityIWishToRun คุณกลับสู่กิจกรรมการใช้ชีวิตของคุณ
การรีโหลดกิจกรรมทั้งหมดของคุณอาจเป็นงานหนัก เพียงแค่ใส่ส่วนของรหัสที่ต้องรีเฟรช ( kotlin ):
override fun onResume() {
super.onResume()
//here...
}
Java:
@Override
public void onResume(){
super.onResume();
//here...
}
และเรียก " onResume () " เมื่อต้องการ
ฉันไม่คิดว่าเป็นความคิดที่ดี ... มันจะดีกว่าถ้าใช้วิธีที่สะอาดกว่า ตัวอย่างเช่นหากกิจกรรมของคุณมีรูปแบบวิธีการทำความสะอาดสามารถล้างแต่ละเครื่องมือในแบบฟอร์มและลบข้อมูลชั่วคราวทั้งหมด ฉันเดาว่าเป็นสิ่งที่คุณต้องการ: กู้คืนกิจกรรมเป็นสถานะเริ่มต้น
หลังจากทดลองสิ่งนี้มาระยะหนึ่งฉันไม่พบผลลัพธ์ที่ไม่คาดคิดจากการรีสตาร์ทกิจกรรม นอกจากนี้ฉันเชื่อว่านี่คล้ายกับสิ่งที่ Android ทำตามค่าเริ่มต้นเมื่อการวางแนวเปลี่ยนไปดังนั้นฉันจึงไม่เห็นเหตุผลที่จะไม่ทำในสถานการณ์ที่คล้ายกัน
ฉันมีปัญหาเดียวกัน
import android.support.v4.content.IntentCompat;
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
รหัสนี้ใช้ได้กับฉัน Android API 17
ในกิจกรรมคุณสามารถโทรrecreate()
ไปที่ "สร้าง" กิจกรรม (API 11+)
ฉันมีวิธีการอื่นเช่น: การตั้งค่าlaunchMode
กิจกรรมของฉันเป็นsingleTop
และไม่ต้องโทรfinish()
ก็startActivity(getIntent())
จะทำงาน เพียงแค่มีการดูแลเกี่ยวกับข้อมูลใหม่ทั้งในและonCreate()
onNewIntent
ด้วยวิธีของ Sush แอปพลิเคชันอาจกระพริบเหมือน AMAN SINGH กล่าว แต่แนวทางของ AMAN SINGH จะยังคงสร้างกิจกรรมใหม่ที่ไม่จำเป็นไม่จำเป็นแม้ว่าเขาจะแก้ไขปัญหา 'กะพริบ' ก็ตาม
สายเกินไปสำหรับคำถามนี้ แต่ถ้าใครบางคนกำลังมองหาวิธีการแก้ปัญหานี่คือ
หลังจากเข้าสู่ระบบฉันมีปัญหาเดียวกันดังนั้นฉันจึงใช้
@Override
protected void onRestart() {
this.recreate();
super.onRestart();
}
ฉันใช้สิ่งนี้และทำงานได้ดีโดยไม่ต้อง
finish()
startActivity(getIntent());
สำหรับฉันมันใช้งานได้แล้วมันไม่ได้สร้าง Intent ใหม่และเช่นเดียวกันกับ Intents ที่โหลดข้อมูลใหม่
overridePendingTransition(0, 0);
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);