1.Activity概述
2.状态与生命周期概述
3.状态与生命周期详解
package com.example.administrator.myapplication; import android.app.Activity; import android.os.Bundle; /*Activity三个状态和七大生命周期方法分析*/ public class MainActivity extends Activity { //activity创建时第一个调用的方法,通常我们在该方法中加载布局文件,初始化UI组件,事件注册等等 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); System.out.println("MainActivity-onCreate"); } /*在onCreate之后调用,用于显示界面,但用户还不能进行交互*/ @Override protected void onStart() { super.onStart(); System.out.println("MainActivity-onStart"); } /*当一个stopped状态的Activity被返回时调用,之后再调用onStart)方法,进入运行状态*/ @Override protected void onRestart() { super.onRestart(); System.out.println("MainActivity-onRestart"); } /*在onStart后调用,该方法执行完成后,用户可以进行交互,当前Activity进入resume的状态(运行状态) * 当一个paused状态的activity被重新返回时,会再次调用该方法,让Activity进入运行状态 * */ @Override protected void onResume() { super.onResume(); System.out.println("MainActivity-onResume"); } /*当其他Activity(透明或窗口模式)进入时,该方法被调用,让当前Activity进入paused(暂停)状态 * 当前Activity还可见,但不可进行交互,如果其他更高优先级的APP需要内存时,当前Activity可能会被销毁(kill) * 当前Activity被返回时会调用onResume()方法 * */ @Override protected void onPause() { super.onPause(); System.out.println("MainActivity-onPause"); } /*当其他Activity完全覆盖该Activity时,会被调用,当前Activity进入stopped状态(停止状态) * 当前Activity不可见,不可进行交互,如果其他更高优先级的APP需要内存时,当前Activity可能会被销毁(kill) * 当前Activity被返回时会调用onRestart()方法 * */ @Override protected void onStop() { super.onStop(); System.out.println("MainActivity-onStop"); } /*当前Activity被销毁时调用,通常在该方法中用来释放资源,当前Activity killed*/ @Override protected void onDestroy() { super.onDestroy(); System.out.println("MainActivity-onDestroy"); } }
4.传递简单数据
Dog.java
package com.example.administrator.myapplication; import android.os.Parcel; import android.os.Parcelable; /** * Created by Administrator on 2016/3/17. */ //打包裹 传递对象 性能好 public class Dog implements Parcelable{ String name; int age; String type; @Override public String toString() { return "Dog{" + "age=" + age + ", name='" + name + '\'' + ", type='" + type + '\'' + '}'; } //描述内容 @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { //把传递数据写进dest dest.writeString(name); dest.writeInt(age); dest.writeString(type); } //对象的创建器 序列化包裹 public static final Parcelable.CreatorCREATOR =new Parcelable.Creator () { @Override public Dog createFromParcel(Parcel in) { Dog dog=new Dog(); dog.name=in.readString(); dog.age=in.readInt(); dog.type=in.readString(); return dog; } @Override public Dog[] newArray(int size) { return new Dog[size]; } }; } cat.java
package com.example.administrator.myapplication; import java.io.Serializable; /** * Created by Administrator on 2016/3/17. */ //可序列化 IO序列化 性能比较低 public class Cat implements Serializable { String name; int age; String type; @Override public String toString() { return "Cat{" + "age=" + age + ", name='" + name + '\'' + ", type='" + type + '\'' + '}'; } }activity_main_a.xml
MainActivityA.java
package com.example.administrator.myapplication; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.EditText; public class MainActivityA extends Activity { private EditText editText_info; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_a); editText_info = (EditText) findViewById(R.id.editText_info); } /*启动ActivityB,并且要传递数据*/ public void sendClick(View v) { //创建一个意图(想干什么) 参数:上下文,要跳转的组件的字节码 Intent intent = new Intent(this, MainActivityB.class); String info = editText_info.getText().toString(); //封装要传递的数据,第一种方法 /* Bundle data = new Bundle(); data.putString("info", info); intent.putExtra("data",data);*/ //第二种方法 intent.putExtra("info", info); intent.putExtra("age", 24); startActivity(intent); } public void sendObjClick(View v) { //用IO消耗的性能比较多 //要传递的对象 Cat cat = new Cat(); cat.name = "皮卡丘"; cat.age = 2; cat.type = "英短"; Intent intent = new Intent(this, MainActivityB.class); intent.putExtra("cat", cat); startActivity(intent); } public void sendObj2Click(View v) { //Parcelable Dog dog = new Dog(); dog.name="旺旺"; dog.age=1; dog.type="金毛"; Intent intent = new Intent(this, MainActivityB.class); intent.putExtra("dog",dog); startActivity(intent); } }activity_main_b.xml
MainActivityB.java
package com.example.administrator.myapplication; import android.content.Intent; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.widget.TextView; public class MainActivityB extends ActionBarActivity { private TextView textView_info; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_b); textView_info = (TextView) findViewById(R.id.info); //intent内容一样 不是一个intent Intent intent = getIntent(); //第一种 /* Bundle data = intent.getBundleExtra("data"); String info = data.getString("info"); textView_info.setText(info);*/ //第二种 String info = intent.getStringExtra("info"); //第二个参数为默认值 int age = intent.getIntExtra("age", 18); Cat cat = (Cat) intent.getSerializableExtra("cat"); // Dog dog = intent.getParcelableExtra("dog"); // textView_info.setText(info + "---" + age ); textView_info.setText(info + "---" + age + "--" + cat.toString()+"\n"); // textView_info.setText(dog.toString()); } }5.传递自定义对象数据
6.处理返回结果
activity_main_activity_result.xml
MainActivityResult.java
package com.example.administrator.myapplication; import android.content.Intent; import android.net.Uri; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText; public class MainActivityResult extends ActionBarActivity { private static final int REQUESTCODE_1 = 0x1; private EditText editText_number; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_activity_result); editText_number = (EditText) findViewById(R.id.editText_number); } /*选择一个电话号码*/ public void selectClick(View v) { Intent intent = new Intent(this, PhoneNumberListActivity.class); //返回结果 第一个参数 intent 第二个参数 请求编码 startActivityForResult(intent, REQUESTCODE_1); } //重写该方法来处理返回的结果 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUESTCODE_1 && resultCode == RESULT_OK) { String number = data.getStringExtra("number"); editText_number.setText(number); } } /*拨打电话*/ public void callClick(View v) { String number=editText_number.getText().toString(); Intent intent=new Intent(); intent.setAction(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:"+number)); startActivity(intent); } }activity_phone_number_list.xml
PhoneNumberListActivity.java
package com.example.administrator.myapplication; import android.content.Intent; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; public class PhoneNumberListActivity extends ActionBarActivity { private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_phone_number_list); listView= (ListView) findViewById(R.id.listView); final String[] numbers={"13713820115","13692208307","13760359165","15817447169","13713686009"}; ArrayAdapteradapter=new ArrayAdapter (this,android.R.layout.simple_list_item_1,android.R.id.text1,numbers); listView.setAdapter(adapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { String number=numbers[position]; Intent intent=new Intent(); intent.putExtra("number",number); setResult(RESULT_OK,intent);//设置返回结果 finish();//结束当前界面 } }); } } //最后要在清单文件配置打电话权限7.屏幕方向与显示方式
横屏android:screenOrientation="landscape"
竖屏android:screenOrientation="portrait"
设置主题全屏 android:theme="@android:style/Theme.DeviceDefault.NoActionBar.Fullscreen"
activity_screen_orientation.xml
ScreamOrientationActivity.java
package com.example.administrator.myapplication; import android.app.Activity; import android.content.pm.ActivityInfo; import android.os.Bundle; import android.view.Window; import android.view.WindowManager; /*设置全屏模式 * 1.通过代码实现 * 2.在清单文件中可以通过设置Activity的主题: * android:theme="@android:style/Theme.DeviceDefault.NoActionBar.Fullscreen" * * 设置窗体模式 * 1.在清单文件中设置主题: * android:theme="@android:style/Theme.DeviceDefault.Dialog" * */ public class ScreamOrientationActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //通过代码设置屏幕方向 // setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); // setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); //设置全屏 // getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); //去除标题栏 // requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_scream_orientation); } }8.屏幕方向旋转
android:configChanges="keyboard|orientation|screenSize"
当配置了android:configChanges="orientation"属性,在横紧屏切换的时候不会重新执行Activity的onCreate方法,只是执行onConfigurationChanged方法,否则切换的时候会重新执行onCreate方法
activity_screen_change.xml
竖屏文件放在layout-land目录ScreenChangeActivity.java
package com.example.administrator.myapplication; import android.app.Activity; import android.content.res.Configuration; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.View; /*屏幕切换默认情况下会重新创建Activity * 为了保存当前Activity的状态,我们可以重写onSaveInstanceState方法来保存相关数据 * 然后在onCreate方法中还原数据*/ public class ScreenChangeActivity extends Activity { int index = 0; //横屏竖屏状态要保存下来 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_screen_change); System.out.println("ScreenChangeActivity--onCreate"); //还原状态值 if (savedInstanceState != null) { index = savedInstanceState.getInt("index", 0); } } public void changeClick(View v) { index++; System.out.println("index=" + index); } //切换屏保存状态 @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); System.out.println("onSaveInstanceState"); outState.putInt("index", index); } //改变布局排版配置 @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); System.out.println("onConfigurationChanged"); } }AndroidManifest.xml
9.SharedPreferences
activity_share_preferences.xml
SharePreferencesActivity.java
package com.example.administrator.myapplication; import android.content.Context; import android.content.SharedPreferences; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.text.TextUtils; import android.widget.EditText; public class SharePreferencesActivity extends ActionBarActivity { private SharedPreferences sp; private EditText editText_msg; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_share_preferences); editText_msg= (EditText) findViewById(R.id.editText_msg); //获取当前程序的SharedPreferences对象 sp = getSharedPreferences("msg", Context.MODE_PRIVATE); } //还原数据 @Override protected void onResume() { super.onResume(); editText_msg.setText(sp.getString("msg", "")); //删除数据 SharedPreferences.Editor editor=sp.edit(); editor.remove("msg"); editor.commit(); } //我们在该事件方法里来存储数据 @Override protected void onPause() { super.onPause(); String msg=editText_msg.getText().toString(); if(TextUtils.isEmpty(msg)) { return; } SharedPreferences.Editor editor= sp.edit(); editor.putString("msg",msg); editor.commit();//提交 } }