পূর্ববর্তী সমস্ত ক্রিয়াকলাপ শেষ করুন


368

আমার অ্যাপ্লিকেশনটিতে নিম্নলিখিত ফ্লো স্ক্রিন রয়েছে:

Home->screen 1->screen 2->screen 3->screen 4->screen 5

এখন আমার log out প্রতিটি স্ক্রিনে একটি সাধারণ বোতাম রয়েছে

( Home/ screen 1 / screen 2 /screen 3/ screen 4 / screen 5)

আমি চাই যে যখন ব্যবহারকারী লগ আউট বোতামে ক্লিক করে (যে কোনও পর্দা থেকে), সমস্ত পর্দা শেষ হয়ে যাবে এবং একটি নতুন স্ক্রিন Log inখুলবে।

আমি FLAG_ACTIVITYএটি অর্জনের জন্য প্রায় সকল চেষ্টা করেছি । স্ট্যাকওভারফ্লোতেও আমি কয়েকটি উত্তর দিয়েছি তবে সমস্যার সমাধান করতে সক্ষম হচ্ছি না। আমার অ্যাপ্লিকেশনটি অ্যান্ড্রয়েড 1.6 এ রয়েছে তাই ব্যবহার করতে সক্ষম হচ্ছে নাFLAG_ACTIVITY_CLEAR_TASK

সমস্যা সমাধানের কোন উপায় আছে কি?


আপনি কি স্টার্টঅ্যাক্টিভিটি ফর রিসাল্ট ব্যবহার করে আপনার নেস্টেড ক্রিয়াকলাপগুলি চালাচ্ছেন?
উডশয়

না। সমস্ত কার্যক্রম স্টার্টঅ্যাক্টিভিটি দিয়ে শুরু হয়।
তন্ময় মণ্ডল

আমি নেস্টেড ক্রিয়াকলাপে কোড ফিনিশাফিনিটিস্টক () চালানোর সময় নেস্টেড ক্রিয়াকলাপগুলি ব্যবহার করছি। এটি আচরণ পরিবর্তন করে? যেমন মাঝে মাঝে ফিনিশ্যাফিনিটিস্টক চলাকালীন রেজাল্ট ইনফোর ফলাফল সরবরাহ করতে ব্যর্থ হচ্ছি।
রিপাল তম্বোলি 21'15

দয়া করে এই উত্তর চেক, এটি নিশ্চয় সহায়তা করবে stackoverflow.com/a/25159180/2732632
Kimmi Dhingra

3
অ্যান্ড্রয়েড 21 চালু করেছে Activity.finishAndRemoveTask ()।
জোসেফ জনসন

উত্তর:


543

ব্যবহার করুন:

Intent intent = new Intent(getApplicationContext(), Home.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

এটি বাড়ির উপরের সমস্ত ক্রিয়াকলাপ পরিষ্কার করবে।

ধরুন আপনি লগইন স্ক্রিনটি যখন ব্যবহারকারী লগ ইন এবং হোম তৈরি হবে এবং তারপরে সেই স্ক্রিনটি 1 থেকে 5 পর্যন্ত থাকবে তার উপরে। আমি পোস্ট করা কোডটি অন্য সমস্ত ক্রিয়াকলাপ শেষ করে আপনাকে হোম স্ক্রিনে ফিরিয়ে দেবে। আপনি অভিপ্রায়টিতে একটি অতিরিক্ত যুক্ত করতে পারেন এবং এটি হোম স্ক্রিনের ক্রিয়াকলাপে পড়তে পারেন এবং এটিও শেষ করতে পারেন (সম্ভবত সেখান থেকে আবার কিছু বা লগইন স্ক্রিনটি চালু করুন)।

আমি নিশ্চিত নই তবে আপনি এই পতাকাটি দিয়ে লগইন করতে চেষ্টা করতে পারেন। সেক্ষেত্রে কীভাবে কার্যক্রমের আদেশ দেওয়া হবে তা আমি জানি না। সুতরাং আপনি জানেন যে আপনি বর্তমানে যে পর্দার উপরে রয়েছেন তা অন্তর্ভুক্ত করে তবে এটি অবশ্যই যাওয়ার উপায় know

আশাকরি এটা সাহায্য করবে.


ব্যবহারকারী তার প্রথম স্ক্রিনটি হোম স্ক্রিন হিসাবে দেখিয়ে চলেছে, এটি মূল ইস্যুটি।
তন্ময় মণ্ডল

পাশাপাশি আমার প্রতিক্রিয়াটি আপনার কাছে হোম স্ক্রিনে ফিরে এসে এটি শেষ করতে হবে finish প্রক্রিয়াটি কোনও স্ক্রীন থেকে উপরের উদ্দেশ্যটিকে কল করে। হোম স্ক্রিনে অভিপ্রায়টি গ্রহণ করুন এবং তাত্ক্ষণিকভাবে লগইনের দিকে অভিপ্রায়টি শুরু করুন এবং স্টার্টঅ্যাক্টিভিটি পদ্ধতির পরে হোম শেষ করুন। আপনি মুলতুবি থাকা অ্যানিমেশনটি ভেতরে ও বাইরে নথার জন্য ওভাররাইড করতে পারেন যাতে এটি রূপান্তরটি না দেখায় (আমি এটি করি কারণ এটি দ্রুততর অনুভূতি বোধ করে) so তাই আপনার প্রয়োজনীয় জিনিসটির জন্য এটি ভাল কাজ করা উচিত।
DArkO

10
ক্রিয়াকলাপটিকে এই হিসাবে ঘোষণা করার পরিবর্তে অভিপ্রায়ের জন্য পতাকা হিসাবে singleInstanceব্যবহার FLAG_ACTIVITY_CLEAR_TOP|FLAG_ACTIVITY_SINGLE_TOPকরার বিষয়টি বিবেচনা করুন । এটি হস্তক্ষেপমূলক ক্রিয়াকলাপ শেষ করবে এবং পছন্দসই ক্রিয়াকলাপ শুরু করবে (বা অগ্রভাগে ফিরিয়ে আনবে)।
কমন্সওয়্যার

13
@ CommonsWare intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);আমার ক্রিয়াকলাপে যুক্ত হওয়া আমার পক্ষে কোনও সহায়তা করেনি the এটি হস্তক্ষেপমূলক ক্রিয়াকলাপ শেষ করেনি। যখন আমি লগইন স্ক্রীন থেকে পিছনে চাপলাম তখন আমি আগের ক্রিয়াকলাপগুলি দেখতে পাচ্ছি e এখানে আমার কোড Intent intent=new Intent(BaseActivity.this, Login.class);intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);startActivity(intent);
তন্ময় মণ্ডল

26
এই ক্রিয়াকলাপটি কেবলমাত্র শীর্ষ ক্রিয়াকলাপের স্ট্যাকটি সাফ করে, সমস্ত ক্রিয়াকলাপ সাফ করার জন্য ইন্টেন্ট.এডডি ফ্ল্যাশগুলি (ইনটেন্ট.এফএলজি_এসিটিভিটি_নেউভাস্কাসেস! ইনটেন্টকম্প্যাট.এফএলএজি_এসিটিভিটি_সিএলএইআর_এসএসি);
অজয় ভেনুগোপাল

318

আপনি চেষ্টা করতে পারেন Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK। এটি সম্পূর্ণ পূর্ববর্তী সমস্ত ক্রিয়াকলাপ (গুলি) সাফ করে এবং নতুন ক্রিয়াকলাপ শুরু করবে।


11
সঠিক সমাধান, তবে কেবল এপিআই 11+
রিউনোডেনইক

আমি এই অতিরিক্ত পতাকাটি ব্যবহার করে শেষ করেছি কারণ এটি মূল ক্রিয়াকলাপটি দেখানোর সময় কোনও বিলম্বের কারণ না করে (এটি পুনরায় আরম্ভ করবে না এটি এত দ্রুত)।
তথ্যের

2
@riwnodennyk এপিআই 11+ কেন?
মুহাম্মদ বাবর

17
পূর্ববর্তী 11 সংস্করণগুলির জন্য ইনটেন্ট কমপ্যাট ব্যবহার করুন Fএফএলএজি_এসিটিভিটি_সিএলআর_এইএসটি
স্টিভেন পেনা

2
হ্যাঁ আপনার যা প্রয়োজন তা হ'ল। আপনার লক্ষ্য ক্রিয়াকলাপের প্রবর্তন মোডটি ম্যানিফেস্টে "একক টাস্ক" হিসাবে সেট করা আছে তা নিশ্চিত করুন।
স্টিভেন পেনা

137

আপনার নতুন ক্রিয়াকলাপ চালু করার আগে কেবল নিম্নলিখিত কোডটি যুক্ত করুন:

finishAffinity();

বা আপনি যদি এটি Android এর পূর্ববর্তী সংস্করণগুলিতে কাজ করতে চান:

ActivityCompat.finishAffinity(this);

12
ActivityCompat.finishAffinity (এই); এপিআই <16 এর জন্য কার্যকলাপ.ফিনিশ () কল করে So সুতরাং এটি কার্যকর হবে না work
আমির আব্রো

1
@ বেটো ক্যালদাস, আমি নিজেই সোর্স কোডটি নিশ্চিত করেছি, এটি আমিরআব্রো উল্লিখিত হিসাবে << 16 এআইপিআইয়ের পক্ষে কাজ করবে না। এটা ঠিক কার্যকলাপ যে আপনার এপিআই <16 ক্ষণস্থায়ী শেষ হবে
HendraWD

39

যখন ব্যবহারকারী সমস্ত উন্মুক্ত ক্রিয়াকলাপ থেকে প্রস্থান করতে চান , তখন তাদের একটি বোতাম টিপতে হবে যা আপনার অ্যাপ্লিকেশন শুরু হওয়ার সাথে সাথে চালিত প্রথম ক্রিয়াকলাপটি লোড করে, অন্যান্য সমস্ত ক্রিয়াকলাপ সাফ করে, তারপরে শেষের অবশিষ্ট ক্রিয়াকলাপ শেষ করে। ব্যবহারকারী যখন প্রস্থান করতে বাটন টিপেন তখন নিম্নলিখিত কোডটি চালিত করুন। আমার ক্ষেত্রে, LoginActivityআমার প্রোগ্রামটি চালানো প্রথম ক্রিয়াকলাপ।

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);

উপরের কোডটি ব্যতীত সমস্ত কার্যক্রম সাফ করে LoginActivity। তারপর ভিতরে নিচের কোডটি করা LoginActivity'র onCreate(...)যখন শোনার জন্য, LoginActivityপ্রস্থান করুন' সংকেত পাস হয় recreated করা হয় এবং ':

if (getIntent().getBooleanExtra("EXIT", false)) {
    finish();  
}

অ্যান্ড্রয়েডে এত সহজে কেন একটি প্রস্থান বোতাম তৈরি করা হচ্ছে?

অ্যান্ড্রয়েড আপনার অ্যাপ্লিকেশনটিতে আপনাকে "প্রস্থান" বাটনটি থেকে নিরুৎসাহিত করার জন্য কঠোর চেষ্টা করে, কারণ তারা চায় যে ব্যবহারকারীরা তাদের ব্যবহৃত প্রোগ্রামগুলি ব্যাকগ্রাউন্ডে চলছে কি না সে সম্পর্কে কখনই চিন্তা করা উচিত নয়।

অ্যান্ড্রয়েড ওএস বিকাশকারীরা চান আপনার প্রোগ্রামটি অপ্রত্যাশিত শাটডাউন এবং ফোনের পাওয়ার বন্ধ থেকে বাঁচতে সক্ষম হোক এবং ব্যবহারকারী যখন প্রোগ্রামটি পুনরায় চালু করে, তখন তারা যেখানে ছেড়েছিল সেখান থেকে ডানদিকে নিয়ে যায়। সুতরাং ব্যবহারকারীরা আপনার অ্যাপ্লিকেশনটি ব্যবহার করার সময় একটি ফোন কল পেতে পারে এবং মানচিত্র খুলতে পারে যার জন্য আপনার অ্যাপ্লিকেশনটিকে আরও সংস্থান থেকে মুক্ত করতে হবে।

যখন ব্যবহারকারী আপনার অ্যাপ্লিকেশনটি পুনরায় চালু করবেন, তখন কোনও বাধা ছাড়াই তারা ছেড়ে গেছে right এই প্রস্থান বোতামটি ক্রিয়াকলাপ ব্যবস্থাপকের কাছ থেকে শক্তি ছিনিয়ে নেওয়ার ফলে স্বয়ংক্রিয়ভাবে পরিচালিত অ্যান্ড্রয়েড প্রোগ্রামের জীবনচক্র নিয়ে সমস্যা সৃষ্টি করে।


31
Intent intent = new Intent(this, classObject);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);

এটি সমস্ত অ্যান্ড্রয়েড সংস্করণে কাজ করবে। যেখানে IntentCompatক্লাসটি অ্যান্ড্রয়েড সমর্থন লাইব্রেরিতে যুক্ত হয়েছে।


IntentCompat.FLAG_ACTIVITY_CLEAR_TASKস্বীকৃত নয়, Intentপরিবর্তে ব্যবহার করুন IntentCompat
কুলমাইন্ড

30

ক্রিয়াকলাপের জন্য নিম্নলিখিত ব্যবহার করুন

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);

খণ্ড ব্যবহারের জন্য CLEAR_TASK পতাকা সরান।

আমি আশা করি এটি কিছু লোকের জন্য ব্যবহার করতে পারে।


24

আমি অনুমান করি যে আমি দেরি করেছি তবে এর সহজ এবং সংক্ষিপ্ত উত্তর রয়েছে। ক্রিয়াকলাপে একটি ফিনিশএফিনিটি () পদ্ধতি রয়েছে যা বর্তমান ক্রিয়াকলাপ এবং সমস্ত পিতামাতার ক্রিয়াকলাপ শেষ করবে তবে এটি কেবল অ্যান্ড্রয়েড 4..১ বা তার চেয়ে বেশি ক্ষেত্রে কাজ করে।

API 16+ এর জন্য ব্যবহার করুন

finishAffinity();

16 এর নিচে জন্য, ব্যবহার করুন

ActivityCompat.finishAffinity(YourActivity.this);

আশা করি এটা সাহায্য করবে!


21

বিকাশকারী.অ্যান্ড্রয়েড.কম থেকে :

public void finishAffinity ()

এপিআই স্তরের 16 এ যুক্ত হয়েছে

এই সক্রিয়তা এবং তত্ক্ষণাত্ নীচে সমস্ত কার্যকারিতা সমান সান্নিধ্যযুক্ত বর্তমান কার্যে সমাপ্ত করুন। এটি সাধারণত ব্যবহৃত হয় যখন কোনও অ্যাপ্লিকেশনটি অন্য কোনও কার্যে চালু করা যায় (যেমন এটি বোঝে এমন কোনও ধরণের ধরণের ACTION_VIEW থেকে) এবং ব্যবহারকারী বর্তমান টাস্কটি থেকে বেরিয়ে আসার জন্য এবং তার নিজস্ব কার্যক্রমে আপ আপ নেভিগেশন ব্যবহার করেছে। এই ক্ষেত্রে, ব্যবহারকারী যদি দ্বিতীয় অ্যাপ্লিকেশনটির অন্য কোনও ক্রিয়াকলাপে নেভিগেট করে থাকে তবে টাস্ক সুইচের অংশ হিসাবে সেগুলি সমস্তই মূল কাজ থেকে সরিয়ে নেওয়া উচিত।

মনে রাখবেন যে এই সমাপ্তিটি আপনাকে পূর্ববর্তী ক্রিয়াকলাপে ফলাফল সরবরাহ করতে দেয় না এবং যদি আপনি এটি করার চেষ্টা করছেন তবে একটি ব্যতিক্রম ছুঁড়ে দেওয়া হবে।


19

একদিকে নোটে, জেনে রাখা ভাল
এই উত্তরটি কার্যকর হয় ( https://stackoverflow.com/a/13468685/7034327 )

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
this.finish();

যদিও এটি কাজ করে না

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

.setFlags() পূর্ববর্তী ফ্ল্যাগগুলি প্রতিস্থাপন করে এবং যখন কোনও নতুন পতাকা সংযোজন করে না .addFlags()

সুতরাং এটি কাজ করবে

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

সেটফ্লেগ বনাম অ্যাডফ্ল্যাগের মধ্যে পার্থক্য সম্পর্কে দুর্দান্ত ব্যাখ্যা, আপনাকে ধন্যবাদ
পেলেনেস

13

যদি আপনার অ্যাপ্লিকেশনটিতে ন্যূনতম এসডিকে সংস্করণ থাকে তবে আপনি ব্যবহার করতে পারেন এসডিকে ফিনিশএফিনিটি ()

এই সক্রিয়তা এবং তত্ক্ষণাত্ নীচে সমস্ত কার্যকারিতা সমান সান্নিধ্যযুক্ত বর্তমান কার্যে সমাপ্ত করুন।

টপ পেমেন্ট স্ক্রিনে এটি আমার পক্ষে সমস্ত ব্যাক-স্ট্যাক অ্যাক্টিভিটিস সরান,

@Override
public void onBackPressed() {
         finishAffinity();
        startActivity(new Intent(PaymentDoneActivity.this,Home.class));
    } 

http://developer.android.com/reference/android/app/Activity.html#finishAffinity%28%29


10

এর জন্য আমি একটি সমাধান কার্যকর করেছি (আমি মনে করি এটি আমি কোথাও স্ট্যাক ওভারফ্লোতে পেয়েছি, কিন্তু আমার মনে নেই, তাই যারাই প্রথম স্থানটিতে এটি করেছে তাকে ধন্যবাদ):

আপনার যে কোনও ক্রিয়াকলাপ থেকে এটি করুন:

// Clear your session, remove preferences, etc.
Intent intent  = new Intent(getBaseContext(), LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

তারপরে আপনার লগইনঅ্যাক্টিভিটিতে, অনান্যরেড অনাইক্রিট করুন:

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

3
এটি সাধারণত খুব খারাপ ধারণা, এটি কাজ করতে পারে, এটি যোগাযোগের একটি পয়েন্টটি প্রবর্তন করে যা ভবিষ্যতে ভেঙে যেতে পারে এবং এটি ডিবাগ করা শক্ত হবে। আমি আপনাকে অভিজ্ঞতা থেকে বলছি :)
মার্টিন মার্কনকিনি

10

অ্যাপ্লিকেশনের শেষ স্ক্রিনে লগআউট বোতামের জন্য, সমস্ত পূর্ববর্তী সমস্ত ক্রিয়াকলাপ শেষ করতে লগআউট বোতাম শ্রোতার এই কোডটি ব্যবহার করুন এবং আপনার সমস্যার সমাধান হয়েছে।

{
Intent intent = new Intent(this, loginScreen.class);
ntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}

8
    Intent i1=new Intent(getApplicationContext(),StartUp_Page.class);
i1.setAction(Intent.ACTION_MAIN);
i1.addCategory(Intent.CATEGORY_HOME);
i1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
i1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i1);
finish();

6
FLAG_ACTIVITY_CLEAR_TASK দু'বার কেন ?
চোলতস্কি

1
আমি যা বুঝি তা থেকে .setFlags পূর্ববর্তী পতাকাগুলি প্রতিস্থাপন করে এবং কোনও পতাকা সংযোজন করে না। .addFlags আপনি যা অনুমান করতে চান তা ব্যবহার করতে চান? সমস্ত কোডের উপরে i1.setFlags (ইন্টেন্ট.এফএলএজি_এসিটিভিটি_নিউইউটিএসএসি | ইনটেন্ট.এফএলজি_এসিটিভিটি_সিএলআরআইটিএএসএসকে) করুন; নিশ্চিহ্ন হয়ে যায়
আইওএসএন্ড্রয়েডওয়াইন্ডোমোবাইল অ্যাপসদেব

addFlags আমার জন্য কাজ করে
জামিল

1
setFlagsসমস্ত পূর্ববর্তী প্রতিস্থাপন করা হবে, তাই সর্বশেষটি setFlagsবৈধ, পূর্ববর্তীগুলি প্রতিস্থাপন করা হবে। সুতরাং আপনাকে কল করার দরকার নেইi1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); i1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
এমট্রাকাল

8

আমার একই সমস্যা আপনি ব্যবহার করতে পারেন IntentCompat, এটি:

import android.support.v4.content.IntentCompat;
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);

এই কোডটি আমার জন্য কাজ করে।

অ্যান্ড্রয়েড এপিআই 17


8

আমার ক্ষেত্রে আমি finishAffinity()গত ক্রিয়াকলাপে ফাংশনটি ব্যবহার করি যেমন:

finishAffinity()
startHomeActivity()

আশা করি এটি কার্যকর হবে।



6

লগ ইন-> হোম-> স্ক্রীন 1-> স্ক্রিন 2-> স্ক্রিন 3-> স্ক্রিন 4-> স্ক্রিন 5

স্ক্রিনে 4 (বা অন্য কোনও) ->

স্টার্টঅ্যাক্টিভিটি (লগ ইন)
সঙ্গে
FLAG_ACTIVITY_CLEAR_TOP


2
আমি যখন পিছনে বোতাম টিপুন তখন পূর্ববর্তী সমস্ত ক্রিয়াকলাপগুলি ক্রম অনুযায়ী প্রদর্শিত হয় ose এই ক্রিয়াকলাপগুলি বন্ধ করা দরকার, যখন লগআউট বোতামটি ক্লিক করা হত সেখানে স্ট্যাকের মধ্যে একটি মাত্র ক্রিয়াকলাপ হবে এবং সেটি লগইন ক্রিয়াকলাপ nd আর কোনও নেই is লগইন স্ক্রিন। ব্যবহারকারী হোম স্ক্রীন থেকে শুরু হয়।
তন্ময় মণ্ডল

6

API> = 15 থেকে API 23 সাধারণ সমাধানের জন্য।

 Intent nextScreen = new Intent(currentActivity.this, MainActivity.class);
 nextScreen.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
 startActivity(nextScreen);
 ActivityCompat.finishAffinity(currentActivity.this);

আপনার উত্তরটি বিস্তারিতভাবে বর্ণনা করুন যাতে প্রত্যেকে এটি থেকে উপকৃত হতে পারে।
শুভময় 18

5

আপনি যদি startActivityForResult()পূর্ববর্তী ক্রিয়াকলাপগুলিতে ব্যবহার করে থাকেন তবে সমস্ত কার্যক্রমে কেবল তার ভিতরে OnActivityResult()থাকা finish();পদ্ধতিটি ওভাররাইড করুন এবং কল করুন .. এটি কাজটি করবে ...


না, আমি startActivityকেবল ব্যবহার করছি ।
তন্ময় মণ্ডল

onActivityResultপ্রতিটি ক্রিয়াকলাপ বজায় রাখা কঠিন হবে D আমি DArkO এর পরামর্শ কার্যকর করেছি এবং আমার লক্ষ্য অর্জন করেছি এবং সহায়তার জন্য ধন্যবাদ।
তন্ময় মণ্ডল

3

ব্যবহারকারী লগআউট বোতামে ক্লিক করার পরে নিম্নলিখিত কোডটি লিখুন:

Intent intent = new Intent(this, LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

এছাড়াও লগইন করার পরেও যদি আপনি নতুন ক্রিয়াকলাপ কল করেন তবে ফিনিস () ব্যবহার করবেন না;


2

কেবলমাত্র আপনি যখন লগইন স্ক্রিন থেকে যান, লগইন স্ক্রিনটি শেষ করার সময় নয়।

এবং তারপরে সমস্ত ফরোয়ার্ড ক্রিয়াকলাপগুলিতে লগআউটের জন্য এটি ব্যবহার করুন:

final Intent intent = new Intent(getBaseContext(), LoginScreen.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);

এটি পুরোপুরি কাজ করে।


1

আপনি যদি ব্যবহারকারীকে লগইন করেন screen 1এবং সেখান থেকে আপনি অন্যান্য স্ক্রিনে যান, ব্যবহার করুন

Intent intent = new Intent(this, Screen1.class);
intent.addFlags(FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

আমি যখন পিছনে বোতাম টিপুন তখন পূর্ববর্তী সমস্ত ক্রিয়াকলাপগুলি ক্রম অনুযায়ী প্রদর্শিত হয় ose এই ক্রিয়াকলাপগুলি বন্ধ করা দরকার, যখন লগআউট বোতামটি ক্লিক করা হত সেখানে স্ট্যাকের মধ্যে একটি মাত্র ক্রিয়াকলাপ হবে এবং তা হবে লগইন ক্রিয়াকলাপ।
তন্ময় মণ্ডল

আপনি এই আচরণ চান, আপনি ওভাররাইড করতে হবে onKeyDownএবং onBackPressed(অথবা onKeyDown, আপনি Android সংস্করণ <2.0 সমর্থন করতে চান তাহলে) কেউই আপনার ক্রিয়াকলাপের প্রতিটি এক (লগইন এক ব্যতীত), এবং startActivity(login)সেখানে উপরে দেখানো হয়।
গ্যাব্রিয়েল নেগুট

আমার একটি বোতাম আছে যা আমাকে স্ট্যাকের সমস্ত ক্রিয়াকলাপ শেষ করে লগইন স্ক্রিনে নিয়ে যাবে? এটা কি সম্ভব?
তন্ময় মণ্ডল

1

আমি এইভাবে পেয়েছি, এটি সমস্ত ইতিহাস সাফ করবে এবং প্রস্থান করবে

Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
Intent intent = new Intent(getApplicationContext(), SplashScreen.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

finish();
System.exit(0);

1

আমি অনুমান করি যে আমি দেরি করেছি তবে এর সহজ এবং সংক্ষিপ্ত উত্তর রয়েছে। ক্রিয়াকলাপে একটি ফিনিশএফিনিটি () পদ্ধতি রয়েছে যা বর্তমান ক্রিয়াকলাপ এবং সমস্ত পিতামাতার ক্রিয়াকলাপ শেষ করবে তবে এটি কেবল অ্যান্ড্রয়েড 4..১ বা তার চেয়ে বেশি ক্ষেত্রে কাজ করে।

API 16+ এর জন্য ব্যবহার করুন

finishAffinity ();

16 এর নিচে জন্য, ব্যবহার করুন

ActivityCompat.finishAffinity (YourActivity.this);

আশা করি এটা সাহায্য করবে!

শেয়ারডেট উত্তর মে 27 '18 এ 8:03 এ

অক্ষয় তারু


0

আমি এপিআই স্তর থাকা সত্ত্বেও প্রতিটি ডিভাইসে কাজ করার সমাধানটি খুঁজে পেয়েছি (এমনকি <11 এর জন্য)

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
ComponentName cn = intent.getComponent();
Intent mainIntent = IntentCompat.makeRestartActivityTask(cn);
startActivity(mainIntent);

0

পূর্ববর্তী সমস্ত ক্রিয়াকলাপ বন্ধ করে এবং স্মৃতিটি সাফ করার সর্বোত্তম উপায়

finishAffinity()
System.exit(0);

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.