آموزش اندروید و چرخه ی حیاط activity
ایجاد پروژه
پروژه ی جدیدی به نامcom.vogella.android.lifecycle.activityایجاد کنید.
کلاس زیر را ایجاد کرده تا به وسیله ی آن رخدادهای چرخه ی حیات (life-cycle events) را از روش اخطارها دریافت کنید.
ساختن activityهاکد: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 باید دومی را از طریق 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) ایجاد کرده سپس با استفاده از آرایه ی نام برده یک Spinnerview به اولین activity خود اضافه کنید. مثال زیر strings.xmlو فایل layout بکاربرده شده توسط اولین activity را فهرست کرده است.
اندروید خود به صورت خودکار حالت یک spinner را احیا (restore) می کند. مطمئن شوید انتخاب و گزینش spinner بین تغییرات نحوه ی پیکربندی و بازآغازی activity ها توسط سیستم اندروید ذخیره گشته و احیا می شود.کد:<?xmlversion="1.0"encoding="utf-8"?><resources><stringname="app_name">Lifecycle</string><stringname="action_settings">Settings</string><stringname="hello_world">Hello world!</string><string-arrayname="operating_systems"><item>Ubuntu</item><item>Android</item><item>iOS</item></string-array></resources><linearlayoutxmlns: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"><spinnerandroid:id="@+id/spinner"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginright="58dp"android:entries="@array/operating_systems"/><buttonandroid: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 حذف کرده و آن را از طریق sourcecode به Spinner تخصیص دهید.
تساوی ثابت (fixed assignment) را از فایل layout خود حذف کنید.کد:// 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);
اطمینان کسب کنید موقعیت در spinner هنوز به صورت خودکار احیا (restore) می شود.کد:<linearlayoutxmlns: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"><spinnerandroid:id="@+id/spinner"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginright="58dp"/><buttonandroid: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 مشاهده نمایید.