آموزش اندروید و چرخه ی حیاط activity
ایجاد پروژه
پروژه ی جدیدی به نام com.vogella.android.lifecycle.activity ایجاد کنید.
کلاس زیر را ایجاد کرده تا به وسیله ی آن رخدادهای چرخه ی حیات (life-cycle events) را از روش اخطارها دریافت کنید.
ساختن activity ها
دو activity ایجاد کنید، اولین activity باید دومی را از طریق Intent راه اندازی می کند.
هشدار
از ثبت هر دو intent در مانیفست اندروید اطمینان کسب کنید.
تست کردن
برنامه ی کاربردی را راه اندازی کرده و دومین activity را فعال کنید. کلیه ی اختطارها را مرور کرده و سعی کنید دلیل اینکه چرا اتفاقات به این ترتیب رخ می دهند را پیدا کنید.
در activity دوم روی دکمه ی بازگشت کلیک کنید. بررسی کنید چرا onSaveInstanceState () فراخوانده نشد.
دکمه ی home را در activity دوم فشار دهید. جهت قرارگیری صفحه ی برنامه ی شبیه ساز خود را با استفاده از میان بر CTRL+F11 تغییر داده و بررسی کنید کدام life-cycle method (متدهای ویژه ی چرخه ی حیات) activity صدا زده می شوند. بررسی کنید آیا فقط activity دوم بازسازی می شود یا این اتفاق برای اولی نیز روی می دهد.
گزینه ی Don't keep activities را در تنظیمات فعال کرده و دوباره بررسی کنید کدام متدها فراخوانده می شود.
حالت لحظه ای (instance state)
یک آرایه ی رشته ای (string array) ایجاد کرده سپس با استفاده از آرایه ی نام برده یک Spinner view به اولین activity خود اضافه کنید. مثال زیر strings.xml و فایل layout بکاربرده شده توسط اولین activity را فهرست کرده است.
اندروید خود به صورت خودکار حالت یک spinner را احیا (restore) می کند. مطمئن شوید انتخاب و گزینش spinner بین تغییرات نحوه ی پیکربندی و بازآغازی activity ها توسط سیستم اندروید ذخیره گشته و احیا می شود.
حال تساوی آرایه ی ثابت (fixed array assignment) را از layout حذف کرده و آن را از طریق source code به Spinner تخصیص دهید.
تساوی ثابت (fixed assignment) را از فایل layout خود حذف کنید.
اطمینان کسب کنید موقعیت در spinner هنوز به صورت خودکار احیا (restore) می شود.
ادامه مطلب رو میتونید از سایتwww.tahlildadeh.com مشاهده کنید.
ایجاد پروژه
پروژه ی جدیدی به نام com.vogella.android.lifecycle.activity ایجاد کنید.
کلاس زیر را ایجاد کرده تا به وسیله ی آن رخدادهای چرخه ی حیات (life-cycle events) را از روش اخطارها دریافت کنید.
کد:
package com.vogella.android.lifecycle.activity; import android.app.Activity; import android.app.Notification; import android.app.NotificationManager; import android.os.Bundle; public class TracerActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); notify("onCreate"); } @Override protected void onPause() { super.onPause(); notify("onPause"); } @Override protected void onResume() { super.onResume(); notify("onResume"); } @Override protected void onStop() { super.onStop(); notify("onStop"); } @Override protected void onDestroy() { super.onDestroy(); notify("onDestroy"); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); notify("onRestoreInstanceState"); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); notify("onSaveInstanceState"); } private void notify(String methodName) { String name = this.getClass().getName(); String[] strings = name.split("\\."); Notification noti = new Notification.Builder(this) .setContentTitle(methodName + " " + strings[strings.length - 1]).setAutoCancel(true) .setSmallIcon(R.drawable.ic_launcher) .setContentText(name).build(); NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); notificationManager.notify((int) System.currentTimeMillis()، noti); } }
ساختن activity ها
دو activity ایجاد کنید، اولین activity باید دومی را از طریق Intent راه اندازی می کند.
کد:
package com.vogella.android.lifecycle.activity; import android.content.Intent; import android.os.Bundle; import android.view.View; public class MainActivity extends TracerActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void onClick(View view) { Intent intent = new Intent(this، SecondActivity.class); startActivity(intent); } } package com.vogella.android.lifecycle.activity; import android.os.Bundle; import android.app.Activity; import android.view.Menu; public class SecondActivity extends TracerActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); } }
از ثبت هر دو intent در مانیفست اندروید اطمینان کسب کنید.
تست کردن
برنامه ی کاربردی را راه اندازی کرده و دومین activity را فعال کنید. کلیه ی اختطارها را مرور کرده و سعی کنید دلیل اینکه چرا اتفاقات به این ترتیب رخ می دهند را پیدا کنید.
در activity دوم روی دکمه ی بازگشت کلیک کنید. بررسی کنید چرا onSaveInstanceState () فراخوانده نشد.
دکمه ی home را در activity دوم فشار دهید. جهت قرارگیری صفحه ی برنامه ی شبیه ساز خود را با استفاده از میان بر CTRL+F11 تغییر داده و بررسی کنید کدام life-cycle method (متدهای ویژه ی چرخه ی حیات) activity صدا زده می شوند. بررسی کنید آیا فقط activity دوم بازسازی می شود یا این اتفاق برای اولی نیز روی می دهد.
گزینه ی Don't keep activities را در تنظیمات فعال کرده و دوباره بررسی کنید کدام متدها فراخوانده می شود.
حالت لحظه ای (instance state)
یک آرایه ی رشته ای (string array) ایجاد کرده سپس با استفاده از آرایه ی نام برده یک Spinner view به اولین activity خود اضافه کنید. مثال زیر strings.xml و فایل layout بکاربرده شده توسط اولین activity را فهرست کرده است.
کد:
<?xml version="1.0" encoding="utf-8" ?> <resources> <string name="app_name">Lifecycle</string> <string name="action_settings">Settings</string> <string name="hello_world">Hello world!</string> <string-array name="operating_systems"> <item>Ubuntu</item> <item>Android</item> <item>iOS</item> </string-array> </resources> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingbottom="@dimen/activity_vertical_margin" android:paddingleft="@dimen/activity_horizontal_margin" android:paddingright="@dimen/activity_horizontal_margin" android:paddingtop="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <spinner android:id="@+id/spinner" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginright="58dp" android:entries="@array/operating_systems" /> <button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onclick="onClick" android:layout_gravity="bottom" android:text="Start new Activity" /> </linearlayout>
حال تساوی آرایه ی ثابت (fixed array assignment) را از layout حذف کرده و آن را از طریق source code به Spinner تخصیص دهید.
کد:
// configure the spinner in code Spinner spinner = (Spinner) findViewById(R.id.spinner); String[] values = getResources().getStringArray(R.array.operating_systems); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this، android.R.layout.simple_list_item_1، values); spinner.setAdapter(adapter);
کد:
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingbottom="@dimen/activity_vertical_margin" android:paddingleft="@dimen/activity_horizontal_margin" android:paddingright="@dimen/activity_horizontal_margin" android:paddingtop="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <spinner android:id="@+id/spinner" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginright="58dp" /> <button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onclick="onClick" android:layout_gravity="bottom" android:text="Start new Activity" /> </linearlayout>
ادامه مطلب رو میتونید از سایتwww.tahlildadeh.com مشاهده کنید.