Android - Intent 基础、技巧汇总

来源:互联网 发布:淘宝上的电器是正品吗 编辑:程序博客网 时间:2024/05/01 03:28

以下是学习了郭霖大神的《第一行代码》整理的关于Intent相关基础用法,分别包含了

  1. 显示Intent写法
  2. 隐式Intent写法
  3. 启动其他程序的隐式Intent写法
  4. Intent传递对象的两种方式Serializable、Parcelable,使用时各有利弊
  5. 在传递数据过程中如何通过Intent将返回数据回传给上一个Activity
  6. Activity的声明周期
  7. 当我们接收的项目比较复杂在阅读代码的过程中需要知道当前展示在我们面前的是哪一个Activity就利用如下技巧吧
  8. 还有随时随地退出Activity
~显示Intent=========            Intent i = new Intent(MainActivity.this, SecondActivity.class);            startActivity(i);~隐式Intent=========            Intent i = new Intent("com.example.intent_test.xiaoxi");            startActivity(i);            //主activity            <activity            android:name=".MainActivity"            //label不仅成为标题栏中名字还是启动程序的名字            android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                //启动Activity                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>            </activity>            <activity android:name=".SecondActivity" >                <intent-filter>                    // action 和 category 都匹配时才能生效;action 与 Intent i = new Intent("com.example.intent_test.xiaoxi")匹配                    <action android:name="com.example.intent_test.xiaoxi" />                    // 可以指定一个action 但可以指定多个category                    <category android:name="android.intent.category.DEFAULT" />                </intent-filter>            </activity>~更多隐式Intent用法:启动其他程序====================            // Intent.ACTION_VIEW是系统内置的action,常量值android.intent.action.VIEW            Intent i = new Intent(Intent.ACTION_VIEW);            i.setData(Uri.parse("http://www.baidu.com"));            startActivity(i);            <activity android:name=".SecondActivity" >                <intent-filter>                    <action android:name="android.intent.action.VIEW" />                    <category android:name="android.intent.category.DEFAULT" />                </intent-filter>            </activity> ~向下一个Activity传递数据            //Activity1 传递String类型数据            Intent i = new Intent(MainActivity.this,SecondActivity.class);            i.putExtra("xiaoxi_data", "this is xiaoxi data text");            startActivity(i);            //Activity2 读取数据            Intent i = getIntent();            String data = i.getStringExtra("xiaoxi_data");            Toast.makeText(this, data, Toast.LENGTH_SHORT).show();~新技能Get,使用Intent传递对象 Serializable=================================简单效率低,写法简单            public class Persion implements Serializable            {                private String name;                private int age;                public String getName()                {                    return name;                }                public int getAge()                {                    return age;                }                public void setName(String n)                {                    this.name = n;                }                public void setAge(int a)                {                    this.age = a;                }            }            // 赋值去传递            Intent i = new Intent(MainActivity.this,SecondActivity.class);            Persion p = new Persion();            p.setAge(18);            p.setName("xiaohong");            i.putExtra("xiaoxi_data", p);            startActivity(i);            //  获取传递过来的值            Persion p = (Persion) getIntent().getSerializableExtra("xiaoxi_data");            Toast.makeText(this, p.getName(), Toast.LENGTH_SHORT).show();~新技能Get,使用Intent传递对象 Parcelable===============================稍复杂但效率高            public class Persion implements Parcelable {            private String name;            private int age;            public String getName() {                return name;            }            public int getAge() {                return age;            }            public void setName(String n) {                this.name = n;            }            public void setAge(int a) {                this.age = a;            }            @Override            public int describeContents() {                return 0;            }            @Override            public void writeToParcel(Parcel dest, int flags) {                dest.writeString(name);                dest.writeInt(age);            }            public static final Parcelable.Creator<Persion> CREATOR = new Parcelable.Creator<Persion>() {                @Override                public Persion createFromParcel(Parcel source) {                    Persion p = new Persion();                    p.name = source.readString();                    p.age = source.readInt();                    return p;                }                @Override                public Persion[] newArray(int size) {                    return new Persion[size];                }            };        }        在Activit1中写数据进行传递            Intent i = new Intent(MainActivity.this,SecondActivity.class);            Persion p = new Persion();            p.setAge(18);            p.setName("xiaohuang");            i.putExtra("xiaoxi_data", p);            startActivity(i);        在Activity中读取到的数据            Persion p = (Persion) getIntent().getParcelableExtra("xiaoxi_data");        Toast.makeText(this, p.getName(), Toast.LENGTH_SHORT).show();   ~返回数据给上一个活动===========            步驟一:Activity1 -> Activity2 启动                        Intent i = new Intent(MainActivity.this, SecondActivity.class);                        //启动一个活动期望活动销毁时返回结果给上一个活动                        startActivityForResult(i, 321);            步骤二: Intent i = new Intent();                    i.putExtra("xiaoxi_data", "ceshi");                    //专门用于将数据返回给上一个活动                    setResult(RESULT_OK, i);                    finish();            步骤三:                        @Override                        protected void onActivityResult(int requestCode, int resultCode, Intent data) {                        switch (requestCode) {                        case 321:                            if (resultCode == RESULT_OK) {                                String d = data.getStringExtra("xiaoxi_data");                                Toast.makeText(this, d, Toast.LENGTH_SHORT).show();                                }                                break;                            }                        }~ 活动的生命周期=========        1/onCreate();活动第一次创建时调用,在这个方法中完成初始化工作,如加载布局,绑定事件等。        2/onStart();活动在不可见到可见时调用。        3/onResume();活动准备好与用户进行交互时调用。此时活动在栈顶并且处于运行状态。        4/onPause();系统准备去启动或者恢复另一个活动时调用,如保存一些关键数据,将消耗CPU资源释放掉。        5/onStop();在活动完全不可见时调用,和onPause()的区别是,如果启动的新活动是一个对话框式的活动那么onPause()会得到执行,而onSopt()方法不会执行        6/onDestroy();这个方法在活动被销毁之前调用            完整生存期:onCreate()-onDestroy()        可见生存期:onStart()-onStop()        前台生存期:onResume()-onPaush()~ 知晓当前活动是哪一个============        新建一个activity作为基类,activity本身是继承Activity,在onCreate()里写入Log.d("xiaoxi", getClass().getSimpleName());最后让所有activity继承自这个活动~ 随时随地退出程序==========        新建一个ActivityCollector类作为活动管理器        public class ActivityCollector {        public static List<Activity> activities = new ArrayList<Activity>();        public static void addActivity(Activity activity) {            activities.add(activity);        }        public static void removeActivity(Activity activity) {            activities.remove(activity);        }        public static void finishAll() {            for (Activity activity : activities) {                if (!activity.isFinishing()) {                    activity.finish();                }            }        }    }        在上一个activity中,就是作为所有activity基类的activity中调用活动器的两个方法        public class BaseActivity extends Activity {        @Override        protected void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            Log.d("BaseActivity", getClass().getSimpleName());            ActivityCollector.addActivity(this);        }        @Override        protected void onDestroy() {            super.onDestroy();            ActivityCollector.removeActivity(this);        }    }    从此以后,不管你想在什么地方退出程序,只需要调用ActivityCollector.finishAll()~ 启动活动的最佳写法(在同一个项目工程中)======================        被调用者写有        public class SecondActivity extends BaseActivity {        public static void actionStart(Context context, String data1, String data2) {            Intent intent = new Intent(context, SecondActivity.class);            intent.putExtra("param1", data1);            intent.putExtra("param2", data2);            context.startActivity(intent);        }        ……    }        调用者调用        SecondActivity.actionStart(FirstActivity.this, "data1", "data2");

欢迎留言讨论,转载请注明出处
http://blog.csdn.net/u013225534

0 0
原创粉丝点击