آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

از بین بردن پروسس برنامه طبق استاندارد اندروید

مجتبی یگانه  12 سال پیش  12 سال پیش
+3 0

سلام 
من معمولا برای بستن کل برنامه از دستور زیر استفاده می کنم

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

اما استاد در مورد پاسخ من این طور گفتند ( لینک
به نقل از استاد:  "روش شما درسته، اما باید توجه داشته باشید که ممکنه برنامه شما بعد از بسته شدن Restart بشه، این مشکل در بسیاری از مواقع پیش میاد. در جمع باید سعی کنید کاری کنید که طبق استاندارد اندروید پیش برید و اونهم استفاده نکردن از خطوط بالا هست."

خوب سوال من اینه ، وقتی برنامه رو با زدن کلید Back در آخرین اکتیویتی می بندیم ، پروسس برنامه بسته نمیشه (!) پس روش استاندارد اندروید برای بسته شدن پردازش های اضافه چیه ؟

0 0
راهش اینه که اگه از thread یا سرویسی استفاده میکنی توی متد onbackpressed متوقفشون بکنی. (12 سال پیش)
0 0
هر اکتویویتی ای وقتی کاربر دکمه ی back را میزند بسته میشه.ولی اگه توی همون اکتیویتی thread ای تعریف شده باشه با زدن دکمه ی back اون thread در حال اجرا میمونه. (12 سال پیش)
0 0
وقتی همه چیز تموم شده باشه ، ترد ها متوقف باشه و ... ، حالا بازم پروسس باز میمونه ! ، یعنی من به جز این دستور چیزی برای بستن پروسس ندیدم (12 سال پیش)
0 0
فکر کنم کد System.exit(0) d باعث بسته شدن نرم افزار می شه. (12 سال پیش)
0 0
دمت گرم :) ، پاسخ درج کن Vote Up کنیم (12 سال پیش)
0 0
همین که کارت راحت افتاد واسه ما Vote Upe :) (12 سال پیش)
0 0
خیلی هم آقایی (12 سال پیش)
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
javac  12 سال پیش
+1 0

چون سوالم به همین موضوع مربوط میشه دیگه تاپیک ایجاد نمیکنم

من یه ActivityEnhanced دارم به این صورت  که دوتا منو داخلش ساختم و این متد زیر رو هم ovrride کردم:

  @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.about: {
                Intent intent = new Intent(G.currentActivity,  ActivityAbout.class);
                G.currentActivity.startActivity(intent);
            }
                break;

            case R.id.exit: {
                finish();
                System.exit(0);

            }
                break;
        }
        return super.onOptionsItemSelected(item);
    }

و چندین اکتیویتی که از این ارث بری دارند.

وقتی روی menu ی خروج میزنم اگر توی صفحه اول برنامه باشم برنامه بسته میشه اما اگر داخل اکتیویتی های داخلی برنامه باشم از اونجا برمیگرده به اکتیویتی قبلش!!

چیکار کنم که با زدن دکمه ی خروج کلا برنامه بسته بشه؟!!

0 0
دستور finish(); برای بستن اکتیویتی فعلی به کار میره. فکر میکنم توی کد شما وقتی این دستور اجرا میشه باعث میشه که اکتیویتی بسته بشه و دیگه دستور System.exit(0); اجرا نشه. دستور finish(); رو حذف کنید از کدتون فکر کنم مشکل حل بشه. همون دستور system.exit (0); کافیه .کل اکیتیویتی ها و برنامه را می بنده. تست نکردم ولی اگه کار کرد لطفا اطلاع بدید. (12 سال پیش)
0 0
نه روش شما کار نمیکنه قبلا تست کردم روشی که پیدا کردم رو پایین نوشتم اما نمیدونم چقدر اصولیه !!:)) (12 سال پیش)
0 0
حق با javac هست ، وقتی برنامه نیاز به اجرا داشته باشه ، یعنی همه ی اکتیویتی ها بسته نباشن ، با بستن پروسس ، پروسس دوباره باز میشه ، و اکتیویتی اجرا میشه ، مگر اینکه از دستور پایین استفاده بشه (12 سال پیش)
پاسخ به سوال 
javac  12 سال پیش
+2 0

راهش رو خودم پیدا کردم :)

توی اکتیویتی enhanced به این صورت یک extra می فرستیم:

 @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.about: {
                Intent intent = new Intent(G.currentActivity, ActivityAbout.class);
                G.currentActivity.startActivity(intent);
            }
                break;

            case R.id.exit: {
                Intent intent = new Intent(this, ActivityMain.class);
                intent.putExtra("mustFinish", true);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

                startActivityForResult(intent, 0);
                setResult(0);
                finish();

            }
                break;
        }
        return super.onOptionsItemSelected(item);
    }

و در activityMain چک میکنیم که باید بسته بشه برنامه یا نه؟

  @Override
    protected void onResume() {
        boolean isMustFinish;
        // TODO Auto-generated method stub
        super.onResume();
        Bundle extras = getIntent().getExtras();
        if (extras != null) {
            isMustFinish = extras.getBoolean("mustFinish");
            if (isMustFinish) {
                System.exit(0);
            }

        }
    }



0 0
بله روش درسته ، قبلا هم همین پاسخ تو انجمن بود ، تمام ایکیتویتی ها بسته بشه ، بعد کار انجام بشه ، که برای بستن پروسس هم system.exit(0) z میدیم :) (12 سال پیش)
0 0
javac جان سوال 1395 رو یه نگاه بنداز ، یکه نکته ی جالبه ! (12 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .