مهمان عزیز شما حق دیدن لینک ها را ندارید

عضویت

و چرخه ی حیاط activity



ایجاد پروژه

پروژه ی جدیدی به نام 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>
اندروید خود به صورت خودکار حالت یک spinner را احیا (restore) می کند. مطمئن شوید انتخاب و گزینش spinner بین تغییرات نحوه ی پیکربندی و بازآغازی activity ها توسط سیستم اندروید ذخیره گشته و احیا می شود.

حال تساوی آرایه ی ثابت (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);
تساوی ثابت (fixed assignment) را از فایل layout خود حذف کنید.
کد:
<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>
اطمینان کسب کنید موقعیت در spinner هنوز به صورت خودکار احیا (restore) می شود.


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

مهمان عزیز شما حق دیدن لینک ها را ندارید

عضویت

مشاهده کنید.