ورود

View Full Version : سوال درباره حافظه اختصاص داده شده به یک Activity



smt1383
سه شنبه 27 آبان 1393, 13:18 عصر
با سلام به دوستان
یک سوال دارم که شاید خیلی ابتدایی باشه. فرض کنیم برنامه من دو Activity داره یکی MainActivity که Activity اصلی برنامه هست و دومی SecondActivity که با کلیک کردن روی یک دکمه در MainActivity این Activity دوم باز می شود با کد زیر:



Intent myIntent=new Intent(MainActivity.this, SecondActivity.class);
startActivity(myIntent);

حال سوال من اینه من یکبار روی Button موجود در Activity اصلی کلیک می کنم و Activity دوم باز میشه. حالا دکمه Back رو می زنم و به Activity اصلی برمی گردم حالا دوباره Button را کلیلک می کنم و دوباره Activity دوم باز میشه. حالا سوال من اینه که اینجا چه اتفاقی افتاده؟ آیا دو تا نمونه از Activity دوم ساخته شده و دو فضای متفاوت در حافظه به آن ها اختصاص داده شده؟ یا Activity که دفعه دوم باز میشه همون Activity هست که دفعه اول باز شده؟
البته به نظر میرسه متفاوت باشن چون وقتی مثلاً داخل Activity دوم یک متنی رو داخل یک EditText می نویسیم و سپس Back رو زده و دوباره به Activity دوم برمیگردیم Activity دوم ریست شده و EditText مجدداً خالیه.

rezaricky
سه شنبه 27 آبان 1393, 20:17 عصر
سلام.
در حالت استاندارد هر بار یک اکتیویتی جدید ایجاد میشه.
برای تغییر اون یا از android:launchMode داخل تگ Activity در فایل مانیفست استفاده کنید. یا اینکه با پارامتری که به متد startActivity میدید اون رو تغییر بدید.
این اسلاید رو ببینید کامل توضیح داده بصورت تصویری :
http://www.slideshare.net/JAX_London/android-android-activity-launch-modes-and-tasks-gonalo-silva

smt1383
چهارشنبه 28 آبان 1393, 13:12 عصر
ممنون از راهنمایی شما
حالا من میخوام اگر داخل activity دوم بودم و متنی را داخل یک EditText نوشتم و بعد دکمه Back را زدم و به Activity اصلی برگشتم و دوباره Activity دوم را باز کردم متنی که در EditText بود از بین نرفته باشد. متدهای زیر راهم در کلاس مربوط به Activity دوم نوشتم اما نشد . دوستان میتونن راهنمایی کنن مشکل کجاست؟




@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
EditText myEditText=(EditText) findViewById(R.id.editText2);
outState.putString("MyValue", myEditText.getText().toString());
super.onSaveInstanceState(outState);
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
// TODO Auto-generated method stub
EditText myEditText=(EditText) findViewById(R.id.editText2);
myEditText.setText(savedInstanceState.getString("MyValue"));
super.onRestoreInstanceState(savedInstanceState);
}

}

smt1383
شنبه 01 آذر 1393, 08:35 صبح
دوستان کسی نمیتونه من راهنمایی کنه؟ بعد از بازگشت از Activity دوم (با دکمه Back) و دوباره باز کردن این Activity چکار کنم که state قبلی خودش رو حفظ کنه مثدا متن EditText ها؟ متدهای onSaveInstanceState و onRestoreInstanceState را هم مطابق آنچه در بالا آوردم Override کردم اما مشکل حل نشد! :گریه::گریه::گریه:

البته الان داخل متدهای onSaveInstanceState و onRestoreInstanceState یک Log گذاشتم و متوجه شدم که اصلا این دو متد اجرا نمی شوند! نمیدونم چرا!