मुझे कुछ दिन पहले यह समस्या थी, और मुझे आपको यह बताने में प्रसन्नता हो रही है कि मुझे इसके आसपास एक रास्ता मिला है।
सबसे पहले, गतिविधि के लिए आप AndroidManifest.xml
में इस ऐड बंद करना चाहते हैं:
android:launchMode="singleTop"
मैं एक चेकबॉक्स उदाहरण का उपयोग करने के लिए जा रहा हूँ। जब यह चेक किया जाता है तो गतिविधि शुरू हो जाती है और जब अनचेक किया जाता है तो गतिविधि को मार डालेगा।
उदाहरण गतिविधि ए गतिविधि बी को कॉल कर रहा है और उसके बाद किसी इरादे का उपयोग कर इसे मार रहा है।
कोड एक में रखा जाना करने के लिए:
boolean keep;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.B);
intent = this.getIntent();
boolean keep = intent.getExtras().getBoolean("keep");
if(keep==true)
{
//execute your code here
}
}
@Override
protected void onNewIntent(Intent intent)
{
super.onNewIntent(intent);
keep = intent.getExtras().getBoolean("keep");
if(keep==false)
{
B.this.finish();
}
}
स्पष्टीकरण:: क्या इस मूल रूप से कार्य करती है, जब चेकबॉक्स चयनित है यह गतिविधि कॉल और
checkbox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(A.this, B.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
if (enable.isChecked()) {
intent.putExtra("keep", true);
startActivity(intent);
}
else
{
intent.putExtra("keep", false);
startActivity(intent);
}
}
});
कोड बी में रखा जाना करने के लिए एक बूलियन मान पास करता है, यदि यह सच है कि गतिविधि को जीवित रखा गया है और इसे अग्रभूमि में लाया गया है। अब, यदि आप ध्वज singleTop
पास नहीं करते हैं तो इस गतिविधि के कई उदाहरण बनाए जाएंगे। singleTop
सुनिश्चित करता है कि केवल वही उदाहरण कहा जाता है। अब, जब चेकबॉक्स अनचेक किया जाता है तो रखने के लिए एक नया मान पास किया जाता है जिसे बी में सत्यापित किया जाता है। यदि अनचेक किया गया है, तो गतिविधि ए झूठी गुजर रही है, और इसलिए बी onNewIntent()
फ़ंक्शन के भीतर से स्वयं को समाप्त कर देता है।
पीएस - आप गतिविधि बी को किसी अन्य गतिविधि से भी बंद कर सकते हैं। बस का उपयोग अन्य गतिविधि सी है:
Intent intent = new Intent(C.this, B.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra("keep", false);
startActivity(intent);
ऐसा लगता है कि अगर कोई एप्लिकेशन किसी अन्य को मार सकता है तो यह सुरक्षा उल्लंघन होगा। – EJK
बेशक लक्ष्य एप्लिकेशन ने इस इरादे के माध्यम से इस क्षमता को प्रकाशित नहीं किया। – EJK