প্রোগ্রাম থেকে অ্যান্ড্রয়েড অ্যাপ্লিকেশনটি কীভাবে ছাড়বেন


321

আমি অ্যানড্রয়েড অ্যাপ্লিকেশনটি প্রোগ্রমেটিকভাবে ছাড়ার জন্য কিছু কোড পেয়েছি। অনডেট্রয়ে () এ নিম্নলিখিত কোডগুলির মধ্যে যে কোনও একটিকে কল করে এটি পুরোপুরি প্রয়োগটি বন্ধ করবে?

  1. System.runFinalizersOnExit(true)
    (বা)
  2. android.os.Process.killProcess(android.os.Process.myPid());

ছাড়ার বোতামটি ক্লিক করার পরে আমি আমার অ্যাপ্লিকেশনটি পটভূমিতে চালাতে চাই না। প্লিজ আমাকে পরামর্শ দেয় যে আমি আমার অ্যাপটি ছাড়তে এই কোডগুলির মধ্যে কোনওটিই ব্যবহার করতে পারি? তা হলে আমি কোন কোডটি ব্যবহার করতে পারি? অ্যান্ড্রয়েডে অ্যাপটি ছেড়ে দেওয়ার কি ভাল উপায়?


ইতিমধ্যে এখানে অনেকগুলি পোস্ট রয়েছে। stackoverflow.com/search?q=h++to+exit+an+android+app
মুদাসসির


'System.exit (0);' ব্যবহার করুন আপনি যখন সত্যিই অ্যাপটি থেকে বেরিয়ে আসতে চান আমি ব্যবহারকারীকে একটি বার্তা দেখানোর পরে অপরিবর্তনযোগ্য ত্রুটিতে এটি করেছি। আপনার যদি প্রয়োজন হয় তবে আপনি অ্যালার্ম ম্যানেজার ব্যবহার করে স্বয়ংক্রিয়ভাবে অ্যাপ্লিকেশন পুনরায় চালু করতে পারেন। দেখুন: blog.janjonas.net/2010-12-20/…
কেউ কোথাও

উত্তর:


396

যেহেতু এপিআই 16 আপনি ফিনিশএফিনিটি পদ্ধতিটি ব্যবহার করতে পারেন যা এটি সম্পর্কিত নাম এবং জাভাদোক বর্ণনার দ্বারা সম্পর্কিত সমস্ত ক্রিয়াকলাপ বন্ধ করার খুব কাছাকাছি বলে মনে হচ্ছে:

this.finishAffinity ();

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

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


যেহেতু API 21 আপনি খুব অনুরূপ কমান্ড ব্যবহার করতে পারেন

finishAndRemoveTask ();

এই কার্যক্রমে সমস্ত ক্রিয়াকলাপ শেষ করে এবং সাম্প্রতিক কার্য তালিকা থেকে এটিকে সরিয়ে দেয়।


28
অবশ্যই এটি সঠিক উত্তর! এটি ব্যবহার করে কোনও অ্যাপ শেষ করা ভাল সমাধান নয় System.exit(0);। আপনার উত্তর করার জন্য আপনাকে ধন্যবাদ! অবশেষে আমি একটি শালীন সমাধান খুঁজে পেয়েছি।
আন্তোনিও

4
আপনি কি জানেন যে 14 এপিআই-তে অন্য কোনও সমাধান রয়েছে? ধন্যবাদ
স্ক্রিপ্ট কিটি

2
আপনি অ্যাপ্লিকেশনটি বন্ধ করে দিলে বা ক্রিয়াকলাপের লাইফসাইকেলের অভ্যন্তরে প্রতিটি ক্রিয়াকলাপ পৃথকভাবে শেষ করতে পারেন।
sivi

3
সতর্কবার্তা! এটি.ফিনিশএফিনিটি () এটিকে মেমরি থেকে অপসারণ বন্ধ করে দেয়, সুতরাং আপনি ধাক্কা বার্তা এবং এগুলি পাবেন না।
টিনচো 825

7
এই সমাধান 99% ক্ষেত্রে কাজ করে। তবে এটি প্রক্রিয়াটি ধ্বংস করবে না, উদাহরণস্বরূপ ড্যাজার সাফ হবে না। এই বিরল ক্ষেত্রে যেখানে প্রক্রিয়াটি হত্যার প্রয়োজন System.exit(0)সেখানে কেবলমাত্র আমার পক্ষে কাজ করা সমাধান।
স্লাভ

155
getActivity().finish();
System.exit(0);

এটি আপনার অ্যাপ্লিকেশন থেকে প্রস্থান করার সেরা উপায় !!!

আমার জন্য সেরা সমাধান।


হ্যাঁ, দুর্দান্ত কাজ করে! এটিকে কাজ করতে পেতে মাইনএটিভিটি থেকে এই কল করতে হবে!
mz87

নিখুঁত সমাধান. প্রক্রিয়াটি শেষ করার দরকার নেই, কারণ অ্যান্ড্রয়েড মেমরি পরিচালনার জন্য সবচেয়ে ভাল জানেন। তবে এটি ক্রিয়াকলাপ শেষ করার পাশাপাশি ব্যবহারকারীদের সুবিধার্থে অ্যাপটি প্রস্থান করার জন্য একটি সমাধান সরবরাহ করে।
IAmTheSquidward

নিখুঁত সমাধান। অনেক সমস্যা স্থির করেছেন। ধন্যবাদ।
superuserdo

26
আমি মনে করি না এটি একটি ভাল সমাধান। আপনি oughtn't ব্যবহার করে আপনার প্রোগ্রাম শেষ System.exit(0);। সঠিক সমাধানটি @ সিভি পোস্ট করেছেন (তার উত্তর উপরে)
অ্যান্টোনিও

13
এটি সমাধান নয়, আপনার স্ট্যাকের একটি স্ট্যাক থাকলে এটি কাজ করে না
ব্যবহারকারী 3290180

45

finishAffinity();

System.exit(0);

আপনি যদি কেবলমাত্র নিজের অ্যাপ্লিকেশন finishAffinity();ব্যতীত ব্যবহার করেন System.exit(0);তবে প্রস্থান করা হবে তবে বরাদ্দ হওয়া মেমরিটি এখনও আপনার ফোন ব্যবহার করবে, সুতরাং ... আপনি যদি কোনও অ্যাপ্লিকেশনটি পরিষ্কার এবং সত্যই বন্ধ করতে চান, তবে উভয়ই ব্যবহার করুন।

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

একটি বোতাম ক্লিকের উদাহরণ

public void exitAppCLICK (View view) {

    finishAffinity();
    System.exit(0);

}

বা আপনি যদি কিছু সুন্দর চান, তবে 3 টি বোতাম হ্যাঁ না এবং বাতিল করুন সহ একটি সতর্কতা ডায়ালগ সহ উদাহরণস্বরূপ

// alertdialog for exit the app
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);

// set the title of the Alert Dialog
alertDialogBuilder.setTitle("your title");

// set dialog message
alertDialogBuilder
        .setMessage("your message")
        .setCancelable(false)
        .setPositiveButton("YES"),
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,
                                        int id) {
                        // what to do if YES is tapped
                        finishAffinity();
                        System.exit(0);
                    }
                })

        .setNeutralButton("CANCEL"),
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,
                                        int id) {
                        // code to do on CANCEL tapped
                        dialog.cancel();
                    }
                })

        .setNegativeButton("NO"),
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,
                                        int id) {
                        // code to do on NO tapped
                        dialog.cancel();
                    }
                });

AlertDialog alertDialog = alertDialogBuilder.create();

alertDialog.show();

3
এটি সঠিক উত্তর, আমি খুঁজছিলাম। ধন্যবাদ
ড্রিফডউড

আমি যদি আমার অ্যাপটিতে এফসিএম বা ব্যাকগ্রাউন্ডের কাজগুলি ব্যবহার করি তবে আমার কোনও সমস্যা হবে না?
রোঘেহে হোসেইনি

মেমরি থেকে অ্যাপ্লিকেশনটি মুছতে আমার এই দরকার ছিল
এম

দয়া করে ব্যবহার করবেন না আপনার System.exit(0);সেই স্মৃতিটি মুক্ত করা উচিত নয়, সিস্টেমের প্রয়োজন হলে এটি আপনার জন্য এটি করবে। এটি উদ্দেশ্যমূলক আচরণ।
ক্রগারিডোস

30

আপনার যদি অ্যাপ্লিকেশনটি মেরে ফেলার দরকার হয় তবে দয়া করে সত্যিই কঠোরভাবে চিন্তা করুন: কোথায় ও কখন সংস্থানগুলি মুক্ত করতে ওএসকে বের করে দেওয়া উচিত নয়?

অন্যথায়, আপনি যদি সত্যিই নিশ্চিত হন, ব্যবহার করুন

finish();

@ ডেভ অ্যাপলটনের মন্তব্যের প্রতিক্রিয়া হিসাবে: প্রথমটি বড় প্রশ্ন / উত্তর কম্বো পড়ুন @ গ্যাব্রিয়েল পোস্ট করেছেন: কোনও অ্যাপ্লিকেশনটি বাতিল করে দেওয়া হচ্ছে কি?

এখন ধরে নিলাম আমাদের কাছে এটি রয়েছে, এখানে প্রশ্নের এখনও একটি উত্তর রয়েছে, আপনি যদি ছাড়ার সাথে কিছু করছেন তবে আপনার কোডের দরকার হয় finish()। স্পষ্টতই আপনার একাধিক ক্রিয়াকলাপ ইত্যাদি হতে পারে ইত্যাদি but কিছু ব্যবহারের ক্ষেত্রে চালিত হতে দেয়

  1. আপনি মেমরির ব্যবহারের কারণে এবং "পটভূমিতে না চলার কারণে ব্যবহারকারীকে সমস্ত কিছু ছেড়ে দিতে চান? সন্দেহজনক। ব্যবহারকারীকে ব্যাকগ্রাউন্ডে কিছু নির্দিষ্ট ক্রিয়াকলাপ বন্ধ করতে দিন, তবে ওএসকে কোনও অপ্রয়োজনীয় পুনরাবৃত্তি বন্ধ করতে দিন।
  2. আপনি চান যে কোনও ব্যবহারকারী আপনার অ্যাপ্লিকেশনটির আগের ক্রিয়াকলাপে না যান? ঠিক আছে, হয় এটি কনফিগার করুন যাতে এটি না হয় বা আপনার অতিরিক্ত বিকল্পের প্রয়োজন। যদি বেশিরভাগ সময় পিছনে = পূর্ববর্তী ক্রিয়াকলাপটি কাজ করে তবে ব্যবহারকারী যদি সে অন্য কিছু করতে চায় তবে কি কেবল ঘরে চাপবেন না?
  3. যদি আপনার কোনও ধরণের পুনরায় সেট করার প্রয়োজন হয় তবে আপনি কীভাবে / ইত্যাদি আপনার অ্যাপ্লিকেশনটি প্রস্থান করা হয়েছে তা খুঁজে পেতে পারেন এবং যদি আপনার ক্রিয়াকলাপ আবার ফোকাস হয়ে যায় তবে আপনি কোথায় ছিলেন তা পুনরায় আরম্ভ করার পরিবর্তে একটি নতুন স্ক্রিন প্রদর্শন করে আপনি সেটিতে পদক্ষেপ নিতে পারেন।

সুতরাং শেষ পর্যন্ত অবশ্যই finish()কিছুই মারবে না, তবে এটি এখনও আমার মনে হয় এমন সরঞ্জাম। যদি "সমস্ত ক্রিয়াকলাপটি হত্যা করুন" এর জন্য কোনও ইউসকেস থাকে তবে আমি এটি এখনও পাইনি।


30
কল finish()করার ফলে অ্যাপ্লিকেশনটি মারা যাবে না। finish()সর্বদা ব্যবহৃত হয়: Call this when your activity is done and should be closed.এটি "পিছনে" বোতামটি হিট করার মতো একই প্রভাব।
ট্যানার পেরেরিন

সমাপ্তি ক্রিয়াকলাপটিকে হত্যা করবে। কীভাবে এই আবেদন প্রশংসায় হত্যা করা যায়?
Nanne

"সমাপ্ত" বা "হত্যার" সাথে Activity(না Application) দোষ নেই । উদাহরণস্বরূপ, আপনি ব্যবহারকারীকে কিছু তথ্য দেখানোর জন্য একটি নতুন ক্রিয়াকলাপ শুরু করতে পারেন। একটি সময়সীমা বা 'ঠিক আছে' চাপ দেওয়ার পরে আপনি finish()কলিং ক্রিয়াকলাপে ফিরে আসতে কল করতে পারেন।
ট্যানার পেরেরিন

42
বেশিরভাগ অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলির একাধিক ক্রিয়াকলাপ রয়েছে।
কমন্সওয়্যার

4
@ ন্যান - আপনি যখন সমস্ত ক্রিয়াকলাপ বন্ধ করতে চান তখন একটি লক স্ক্রিন একটি উদাহরণ। মনে করুন আপনি কোনও ব্যাংকিং অ্যাপে লগইন করেছেন। ব্যবহারকারীর সাথে কোনও মিথস্ক্রিয়া না নিয়ে নির্দিষ্ট সময়ের পরে লক স্ক্রিনটি চালু হয়। কেউ যদি লক স্ক্রিন থেকে পিছনের বোতামটি হিট করে তবে আপনি সমস্ত কার্যক্রম বন্ধ করতে চাইবেন!
জাবারি

19

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


2
আমি এই ব্যবহারের ক্ষেত্রে পুরোপুরি একমত আমার সুরক্ষিত অ্যাপ্লিকেশনটিও বিবেচনা করুন যা অবশ্যই নির্দিষ্ট স্থানে পাওয়া উচিত এবং ব্যবহারকারী যদি সেই স্থানে না থাকে তবে এটি বন্ধ করা ভাল। আমি কি করব?
সিডওয়েল

18

একটি তৈরি করুন ExitActivityএবং তা ম্যানিফেস্টে ঘোষণা করুন । এবং ExitActivity.exit(context)অ্যাপটি প্রস্থান করার জন্য কল করুন।

public class ExitActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        finish();
    }

    public static void exit(Context context) {
        Intent intent = new Intent(context, ExitActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
        context.startActivity(intent);
    }

}

এটি সর্বাধিক ভোট দেওয়া উত্তর তবে এটি হ্যাক। অনক্রিটে কলিং ফিনিসটি ডিভাইসগুলিতে বেশিরভাগ, না থাকলেও চটকদার দেখাবে।
DoruChidean

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

1
আপনার ম্যানিফেস্টে এই শ্রেণীর ঘোষণা করতে ভুলবেন না। চতুর হ্যাক জন্য যদিও +1।
তাসলিম ওসেনি

এই কাজ! ভোট দিয়েছেন
TuanDPH

17

অ্যান্ড্রয়েড , স্যাম্পলএকটিভিটি.থিস.ফিনিশ () এ ছাড়ার কোনও অ্যাপ্লিকেশন নেই ; বর্তমান ক্রিয়াকলাপ শেষ করবে।

আপনি যখন একটি ক্রিয়াকলাপ থেকে অন্য ক্রিয়াকলাপে চলে যান তখন আগেরটি শেষ করুন finish

Intent homeintent = new Intent(SampleActivity.this,SecondActivity.class);
startActivity(homeintent);
SampleActivity.this.finish();

13

প্রথমত, এই পদ্ধতির জন্য সর্বনিম্ন এপিআই 16 প্রয়োজন।

এই সমস্যাটি আরও ব্যাপকভাবে সমাধান করার জন্য আমি এই সমাধানটি 3 ভাগে ভাগ করব।

1. আপনি যদি কোনও ক্রিয়াকলাপে অ্যাপ্লিকেশনটি ছাড়তে চান তবে এই কোড স্নিপেট ব্যবহার করুন:

if(Build.VERSION.SDK_INT>=16 && Build.VERSION.SDK_INT<21){
    finishAffinity();
} else if(Build.VERSION.SDK_INT>=21){
    finishAndRemoveTask();
}

২. যদি আপনি কোনও অ ক্রিয়াকলাপে অ্যাক্সেস আছে এমন কোন কার্যকলাপের ক্লাসে অ্যাপ্লিকেশনটি ছাড়তে চান তবে এই কোড স্নিপেট ব্যবহার করুন:

if(Build.VERSION.SDK_INT>=16 && Build.VERSION.SDK_INT<21){
    getActivity().finishAffinity();
} else if(Build.VERSION.SDK_INT>=21){
    getActivity().finishAndRemoveTask();
}

৩. আপনি যদি কোনও অ-ক্রিয়াকলাপ শ্রেণিতে অ্যাপ্লিকেশনটি ছাড়তে চান এবং পরিষেবাদির মতো ক্রিয়াকলাপে অ্যাক্সেস না করতে পারেন তবে আমি আপনাকে ব্রডকাস্টরসিভার ব্যবহার করার পরামর্শ দিচ্ছি। আপনি এই প্রকল্পটি আপনার প্রকল্পের সমস্ত ক্রিয়াকলাপে যুক্ত করতে পারেন।

লোকালব্রোডকাস্টম্যানেজার এবং ব্রডকাস্টআরসিভার ইনস্ট্যান্স ভেরিয়েবলগুলি তৈরি করুন। আপনি চাইলে getPackageName () + "। ক্লোজআপ" প্রতিস্থাপন করতে পারেন।

LocalBroadcastManager mLocalBroadcastManager;
BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equals(getPackageName()+".closeapp")){
            if(Build.VERSION.SDK_INT>=16 && Build.VERSION.SDK_INT<21){
                finishAffinity();
            } else if(Build.VERSION.SDK_INT>=21){
                finishAndRemoveTask();
            }
        }
    }
};

এটিকে ক্রিয়াকলাপের অনক্রিয়েট () পদ্ধতিতে যুক্ত করুন।

mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
IntentFilter mIntentFilter = new IntentFilter();
mIntentFilter.addAction(getPackageName()+".closeapp");
mLocalBroadcastManager.registerReceiver(mBroadcastReceiver, mIntentFilter);

এছাড়াও, ক্রিয়াকলাপের onDestroy () পদ্ধতিতে নিবন্ধভুক্ত রিসিভারটি কল করতে ভুলবেন না

mLocalBroadcastManager.unregisterReceiver(mBroadcastReceiver);

অ্যাপ্লিকেশন ছাড়ার জন্য, আপনাকে অবশ্যই লোকালড্রোডকাস্টম্যানেজার ব্যবহার করে সম্প্রচার পাঠাতে হবে যা আমি আমার প্লে সার্ভিস ক্লাসে ব্যবহার করি যা পরিষেবাটি প্রসারিত করে।

LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(PlayService.this);
localBroadcastManager.sendBroadcast(new Intent(getPackageName() + ".closeapp"));

10

আপনি finishAndRemoveTask ()API 21 থেকে ব্যবহার করতে পারেন

সর্বজনীন শূন্যতা শেষ এবং AndRemoveTask ()

এই কার্যক্রমে সমস্ত ক্রিয়াকলাপ শেষ করে এবং সাম্প্রতিক কার্য তালিকা থেকে এটিকে সরিয়ে দেয়।


8

এটি আপনার অ্যাপ্লিকেশনটি কত দ্রুত বন্ধ করতে চান তার উপর নির্ভর করে।

আপনার অ্যাপ্লিকেশনটি বন্ধ করার একটি নিরাপদ উপায় হ'ল ফিনিশএফিনিটি ();

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

আপনি যদি নিশ্চিত হতে চান যে আপনার অ্যাপটি পুরোপুরি বন্ধ হয়ে গেছে System.exit (0) ব্যবহার করুন ;

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

আপনি যদি দীর্ঘ চলমান কার্যের সাথে একত্রে ওয়াচডোগ ব্যবহার করেন তবে আপনি বিভিন্ন পদ্ধতির প্রভাব দেখতে পারবেন।

new ANRWatchDog(2000).setANRListener(new ANRWatchDog.ANRListener() {
    public void onAppNotResponding(ANRError error) {
        MainActivity.this.finishAffinity();
        System.exit(0);
    }
}).start();
for(int i = 0; i < 10; ++i){
    --i;
}

এটি কোনও এএনআর ডায়ালগ বা এর মতো কিছু প্রদর্শন না করে 2 সেকেন্ড পরে আপনার অ্যাপ্লিকেশনটিকে হত্যা করে। আপনি যদি System.exit (0) অপসারণ করেন তবে এই কোডটি চালান এবং অ্যাপটি বন্ধ হয়ে যাওয়ার পরে এটি পুনরায় চালু করুন, আপনি কিছু অদ্ভুত আচরণ অনুভব করবেন, কারণ অন্তহীন লুপটি এখনও চলছে।


8

আপনি ভাল ব্যবহার ছিল finish()যদি আপনি থাকেন Activity, অথবা getActivity().finish()আপনি যদিFragment

আপনি যদি অ্যাপ্লিকেশনটি পুরোপুরি ছেড়ে দিতে চান তবে ব্যবহার করুন:

getActivity().finish();
System.exit(0);

6

অ্যাপ্লিকেশন থেকে প্রস্থান করার সহজ ও সহজ উপায়

Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory(Intent.CATEGORY_HOME);
homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(homeIntent);

এটি কি কেবল হোম স্ক্রিন নিয়ে আসে বা আসলে অ্যাপটিকে মেরে ফেলে?
আরপট্টবী

5

আমি মনে করি আপনি যা সন্ধান করছেন এটি এটি

activity.moveTaskToBack(Boolean nonRoot);


5

আমরা এমন কোড চাই যা শক্ত এবং সহজ। এই সমাধানটি পুরানো ডিভাইস এবং আরও নতুন ডিভাইসে কাজ করে।

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
        getActivity().finishAffinity();
    } else{
        getActivity().finish();
        System.exit( 0 );
    }

5

@MobileMateo অনুরূপ, কিন্তু Kotlin

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
    this.finishAffinity()
} else{
    this.finish()
    System.exit(0)
}

4

আমি নিশ্চিত নই যে এটি ভ্রান্ত হয়েছে কি না, তবে আমি এটি কীভাবে করব ...

পদক্ষেপ 1 - আমার সাধারণত একটি ক্লাস থাকে যাতে আমি বিশ্বব্যাপী অ্যাক্সেস করতে চাই এমন পদ্ধতি এবং ভেরিয়েবল ধারণ করে। এই উদাহরণে আমি এটিকে "অ্যাপ" শ্রেণি বলব। আপনার অ্যাপ্লিকেশনটিতে থাকা প্রতিটি ক্রিয়াকলাপের জন্য শ্রেণীর অভ্যন্তরে স্থির ক্রিয়াকলাপের পরিবর্তনশীল তৈরি করুন। তারপরে "ক্লোজ" নামে একটি স্ট্যাটিক পদ্ধতি তৈরি finish()করুন যা সেই ক্রিয়াকলাপের প্রতিটিের চলকগুলিকে শূন্য না করলে পদ্ধতিটি চালাবে । আপনার যদি প্রধান / পিতামাতার ক্রিয়াকলাপ থাকে তবে এটি বন্ধ করুন:

public class App
{
    ////////////////////////////////////////////////////////////////
    // INSTANTIATED ACTIVITY VARIABLES
    ////////////////////////////////////////////////////////////////

        public static Activity activity1;
        public static Activity activity2;
        public static Activity activity3;

    ////////////////////////////////////////////////////////////////
    // CLOSE APP METHOD
    ////////////////////////////////////////////////////////////////

        public static void close()
        {
            if (App.activity3 != null) {App.activity3.finish();}
            if (App.activity2 != null) {App.activity2.finish();}
            if (App.activity1 != null) {App.activity1.finish();}
        }
}

পদক্ষেপ 2 - আপনার প্রতিটি ক্রিয়াকলাপে onStart()এবং onDestroy()পদ্ধতিগুলিকে ওভাররাইড করুন । ইন onStart(), " this" এর সমান আপনার অ্যাপ্লিকেশন শ্রেণিতে স্থির পরিবর্তনশীল সেট করুন । ইন onDestroy(), এটি সমান সেট করুন null। উদাহরণস্বরূপ, "ক্রিয়াকলাপ 1" শ্রেণিতে:

@Override
public void onStart()
{
    // RUN SUPER | REGISTER ACTIVITY AS INSTANTIATED IN APP CLASS

        super.onStart();
        App.activity1 = this;
}

@Override
public void onDestroy()
{
    // RUN SUPER | REGISTER ACTIVITY AS NULL IN APP CLASS

        super.onDestroy();
        App.activity1 = null;
}

পদক্ষেপ 3 - আপনি যখন নিজের অ্যাপটি বন্ধ করতে চান, কেবল কল করুনApp.close() যে কোনও জায়গা থেকে করুন। সমস্ত তাত্ক্ষণিক কার্যক্রম বন্ধ হবে! যেহেতু আপনি কেবল ক্রিয়াকলাপ বন্ধ করছেন এবং অ্যাপটি নিজেই খুন করছেন না (যেমন আপনার উদাহরণ হিসাবে), অ্যান্ড্রয়েড সেখান থেকে গ্রহণ করতে এবং প্রয়োজনীয় কোনও ক্লিনআপ করতে মুক্ত।

আবার, আমি জানি না এটি কোনও কারণে ভ্রান্ত হবে কিনা। যদি তা হয় তবে কেন এটি হয় এবং কীভাবে এটি উন্নত করা যায় সে সম্পর্কে মন্তব্যগুলি পড়তে আমার ভালো লাগবে!


আকর্ষণীয়, আমিও অন্যান্য অভিজ্ঞ অ্যান্ড্রয়েড বিকাশকারীরা এটি সম্পর্কে কী ভাবেন সে বিষয়ে আগ্রহী হব।
রুডি কেরশা

4
আপনার ক্রিয়াকলাপের একটি রেফারেন্স রেখে আপনি আসলে স্মৃতি ফাঁস করছেন! দেখুন এই একটি মধ্যে গভীরতা আলোচনার জন্য।
মানাগরম

@ মনগরম এই পোস্টের পেছনের ভিত্তিটি হ'ল প্রক্রিয়াটি (এই ক্ষেত্রে, কার্যকলাপ) ধ্বংস হয়ে যাওয়ার পরেও স্থির পরিবর্তনশীল থাকবে remain যদি যথাযথভাবে ঘর পরিষ্কার করা হয় তবে এটি একটি নন-ইস্যু ... সুতরাং আমি ক্রিয়াকলাপের অনডাস্ট্রয়ে () পদ্ধতিতে উল্লেখটি বাতিল করার কারণ n
জাবরী

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

1
কোন সমস্যা ছাড়াই কাজ করেছেন। জন্য api>=16ব্যবহার finishAffinity()আর এই পদ্ধতি ব্যবহার করুন।
জনাব কেউ

4

কোনও অ্যাপ্লিকেশন বন্ধ করা কি ভ্রান্ত? । এই লিঙ্কটি মাধ্যমে যান। এটি আপনার প্রশ্নের উত্তর দেয়। সিস্টেমটি একটি অ্যাপ্লিকেশন হত্যার কাজ করে।

ধরুন আপনার দুটি ক্রিয়াকলাপ রয়েছে একটি এ বি। আপনি এ থেকে বি তে নেভিগেট করেন যখন আপনি ব্যাক বোতামটি ক্লিক করেন তখন আপনার ক্রিয়াকলাপ বিটি ব্যাকস্ট্যাকের আকারে বিনষ্ট হয় এবং ধ্বংস হয়। পিছনের স্ট্যাক ক্রিয়াকলাপের পূর্ববর্তী ক্রিয়াকলাপটি ফোকাস নেয়।

অ্যাপ্লিকেশনটি কখন বদ্ধ করা হবে তা সিদ্ধান্ত নেওয়ার জন্য আপনার এটি সিস্টেমে ছেড়ে দেওয়া উচিত।

প্রকাশ্য শূন্য finish()

আপনার ক্রিয়াকলাপ শেষ হয়ে গেলে এটিকে কল করুন এবং বন্ধ করে দেওয়া উচিত।

ধরুন আপনার অনেক কার্যক্রম রয়েছে। আপনি অ্যাকশন বারটি ব্যবহার করতে পারেন। আপনার অ্যাপ্লিকেশনটির মূল কার্যকলাপে হোম আইকন নেভিগেট ক্লিক করুন। মেইনএ্যাকটিভিটিতে অ্যাপ্লিকেশনটি থেকে বেরিয়ে আসতে ব্যাক বোতামটি ক্লিক করুন।


3

অ্যাপ্লিকেশন থেকে বেরিয়ে আসার জন্য আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন:

getActivity().finish();
Process.killProcess(Process.myPid());
System.exit(1);

পরিষেবাগুলি বন্ধ করার জন্য নিম্নলিখিত পদ্ধতিতে কল করুন:

private void stopServices() {        
    final ActivityManager activityManager = SystemServices.getActivityManager(context);
    final List<ActivityManager.RunningServiceInfo> runningServices = activityManager.getRunningServices(Integer.MAX_VALUE);
    final int pid = Process.myPid();
    for (ActivityManager.RunningServiceInfo serviceInfo : runningServices) {
        if (serviceInfo.pid == pid && !SenderService.class.getName().equals(serviceInfo.service.getClassName())) {
            try {
                final Intent intent = new Intent();
                intent.setComponent(serviceInfo.service);
                context.stopService(intent);
            } catch (SecurityException e) { 
                 // handle exception
            }
        }
    }
}

2

এটি খুব দেরিতে হতে পারে এবং সেই নির্দেশিকাগুলি অনুসারে আপনি নিজের দ্বারা জীবনচক্র প্রক্রিয়াটি পরিচালনা করার কথা নয় (যেমন ওএস আপনার পক্ষে এটি করে)। একটি পরামর্শ হ'ল আপনি আপনার সমস্ত ক্রিয়াকলাপগুলিতে " finish()" এর সাথে ব্রডকাস্ট রিসিভারটি নিবন্ধভুক্ত করুন onReceive() এবং যখনই আপনি প্রস্থান করতে চান আপনি একটি উদ্দেশ্য সহজেই পাস করতে পারবেন যেটি নির্দেশ করে যে সমস্ত ক্রিয়াকলাপ বন্ধ হয়ে যাবে ..... যদিও নিশ্চিত হয়ে নিন যে আপনি " আপনার onDestroy()পদ্ধতিতে রিসিভারটি নিবন্ধভুক্ত করুন।


1

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


4
কোনও অ্যাপ্লিকেশন থেকে সাইন আউট করার জন্য অ্যাপ্লিকেশনটিকে সত্যই মারতে হবে। সুতরাং সাইন আউট করার পরে অ্যাপ্লিকেশনটিকে হত্যা করার নিশ্চয়তার একটি উপায় থাকা উচিত
এনিওম

1

অ্যাপ্লিকেশনটি বাটন ক্লিকের প্রস্থান করার সঠিক এবং সঠিক সমাধান নীচের কোডটি ব্যবহার করছে:

// বোতামে ব্যাক চাপা ইভেন্টে

public void onBackPressed()
{ 
   moveTaskToBack(true);
   finish();
}

এটি সম্পূর্ণ বর্তমান অ্যান্ড্রয়েড উপাদান (যেমন ক্রিয়াকলাপ), সম্পূর্ণ অ্যাপ্লিকেশন নয়
লাজিওড্রিট

এটি কেবলমাত্র পটভূমিতে অ্যাপ্লিকেশন প্রেরণ করবে
কুমার গৌরব

1

আপনি যদি কোটলিন ব্যবহার করছেন তবে অ্যাপটি থেকে বেরিয়ে আসার সঠিক উপায় এবং এর বিকল্পটি System.exit()একটি অন্তর্নির্মিত পদ্ধতি

exitProcess(0)

ডকুমেন্টেশন দেখুন ।

0প্যারামিটার হিসাবে সংখ্যা মানে প্রস্থানটি নির্ধারিত এবং কোনও ত্রুটি ঘটেনি।


0

এটি যে কোনও কিছুকে মেরে ফেলবে;)

int p = android.os.Process.myPid();
android.os.Process.killProcess(p);


0

অ্যানড্রয়েডের যুক্তি ভঙ্গ না করে এবং বিদ্যমান ক্রিয়াকলাপগুলিতে আরও কোড যুক্ত না করে এবং অতিরিক্ত পাস করা ছাড়াই কোনও ক্রিয়াকলাপ থেকে অ্যাপ্লিকেশন ছাড়ার সবচেয়ে সহজ উপায় হ'ল নিম্নলিখিতটি:

public static void quitApplication (Activity currentActivity) {
    Intent intent = new Intent (currentActivity, QuitApplicationActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);

    currentActivity.startActivity (intent);
    currentActivity.finish ();
}

QuitApplicationActivityবিং:

public class QuitApplicationActivity extends AppCompatActivity {

    @Override
    protected void onCreate (Bundle savedInstanceState) {
        super.onCreate (savedInstanceState);

        finish ();
    }
}

0

@ সিভির উত্তর অ্যাপটি বন্ধ করে দেয়। তবে ফেরার ক্ষেত্রে, আপনার কিছু শিশু কার্যকলাপ থাকলে, অন্য একটি অসমাপ্ত ক্রিয়াকলাপ খোলা হতে পারে। আমি noHistory:trueআমার ক্রিয়াকলাপগুলিতে যুক্ত করেছি যাতে রিটার্নের অ্যাপ্লিকেশনটি মেইনএকটিভিটি থেকে শুরু হয়।

<activity 
      android:name=".MainActivity"
      android:noHistory="true">
</activity>

0

কেবল কোনও অ্যাপ্লিকেশনটি বন্ধ করার নৃশংস পদ্ধতির তালিকায় একটি যুক্ত করতে:

Process.sendSignal(Process.myPid(), Process.SIGNAL_KILL);


Process.killProcess(Process.myPid())একই কাজ করে তবে সংক্ষিপ্ত
ivan8m8

-1

আপনি আপনার সম্পূর্ণ অ্যাপ্লিকেশন প্রস্থান করতে পারেন। এইভাবে

Intent intent = getBaseContext().getPackageManager()
             .getLaunchIntentForPackage(getBaseContext().getPackageName());
intent .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

এটি 100% কাজ করবে। শুভকামনা করছি!


1
এই প্রশ্নের উত্তর বলে মনে হচ্ছে না!
আল মোতফার

-4

কীপ্রেসড () চাপের পিছনে কী চাপতে কেবল সমাপ্তি () ব্যবহার করুন


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