intent和handler的理解和使用


一、当前的对intent和handler的理解

         1、intent是作为一个参数传递机制存在的。

         (1)它可以向activity传递参数以及Object。(Object需要进行序列化)。

         (2)它可以进行系统级别的调用、比如:调起系统拨号页面、调起系统设置等。

         (3)intent传递参数的方式:(intent.putString("key","value")、intent.putInt("key","value")       等。)。

         2、handler主要是用来在线程中刷新界面显示的。

         (1)使用时,需要new handler(){}、在new的时候,里面接收传递的handler的what      值,与传递时给定的静态常亮做一个对应关系,来进行不同的操作。(其中what为int        类型)。

         (2)handler中还可以做休眠操作。让线程等待几秒后再运行。(在线程等待时,需要进行try{}catch(Exceptione){}捕捉异常。(在try{}catch(Exception e){}final{}其中finally{}是 不管try和catch走了哪个,都会执行finally{}中的方法。))

         (3)在传递handler的时候,可以传递intent类型的值,intent中可以保存数据。然后在new handle(){}的时候进行接收,判断what并执行获取intent中参数的操作。)

二、其中概念模糊的地方

         1、intent其他常用的使用情况、如何使用以及注意事项?

         2、handler其他常用的使用情况及注意事项?

         3、Object序列化的时候,除了Serializable以外,还有一个序列化的方法,两者之间的区别及如何选择合适的序列化方法?

         4、handler中如何实现定时任务有几种方法,不同方法如何使用以及注意事项?

三、intent资料查阅总结

         1、intent常用的使用方法:

         (1)参考地址:https://blog.csdn.net/wjky2014/article/details/78342325

         总结:

         a、intent的使用场景

                  i) 通过组件名启动

                  ii)通过包名、类名启动

                  iii)通过类启动

                  iv)打电话

                  v)发短信

                  vi)打开网页

                  vii)播放音乐

                  viii)打开图片

                  ix)创建闹钟

                  x)创建定时器

                  xi)添加日历事件

                  xii)拍照

                  xiii)打开Camera

                  xiv)打开视频录像

                  xv)选择联系人

                  xvi)查看联系人

                  xvii)编辑联系人

                  xviii)插入联系人

                  xix)写邮件

                  xx)打开地图指定点

阅读笔记:

1.学习到了ComponentName启动activity的方式以及使用。它可以打开其他应用程序中的activity,前提是需要知道要启动activity的完整的包名,并且所打开的activity应为程序的入口activity或者在manifest文件中进行申明:android:exported="true"

2.可能会用到的方法。

         /**

    * 添加日历事件

    * **/

    public static void AddCalendarEvent(Contextcontext, String title,

           String location, Calendar begin, Calendar end) {

       Intent intent = new Intent(Intent.ACTION_INSERT)

               .setData(Events.CONTENT_URI).putExtra(Events.TITLE, title)

               .putExtra(Events.EVENT_LOCATION, location)

               .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, begin)

               .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, end);

       if (intent.resolveActivity(context.getPackageManager()) != null) {

           context.startActivity(intent);

       }

    }

3. Serializable和Parcelable的使用与区别:

参考地址:https://blog.csdn.net/wei_lei/article/details/50515093

Serializable 是序列化的意思,表示将一个对象转换成可存储或可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。至于序列化的方法也很简单,只需要让一个类去实现Serializable 这个接口就可以了。

Parcelable 方式的实现原理是将一个完整的对象进行分解,而分解后的每一部分都是Intent 所支持的数据类型,这样也就实现传递对象的功能了。

Parcelable 的实现方式要稍微复杂一些。首先我们让Person 类去实现了Parcelable 接口,这样就必须重写describeContents()和writeToParcel()这两个方法。其中describeContents()方法直接返回0 就可以了,(内容描述接口,基本不用管)而writeToParcel()方法中我们需要调用Parcel的writeXxx()方法将Person 类中的字段一一写出。注意字符串型数据就调用writeString()方法,整型数据就调用writeInt()方法,以此类推。
除此之外,我们还必须在Person 类中提供一个名为CREATOR 的常量,这里创建了Parcelable.Creator 接口的一个实现,并将泛型指定为Person。接着需要重写createFromParcel()和newArray()这两个方法,在createFromParcel()方法中我们要去读取刚才写出的name 和age字段,并创建一个Person 对象进行返回,其中name 和age 都是调用Parcel 的readXxx()方法读取到的,注意这里读取的顺序一定要和刚才写出的顺序完全相同。而newArray()方法中的实现就简单多了,只需要new 出一个Person 数组,并使用方法中传入的size 作为数组大小就可以了

1)在使用内存的时候,Parcelable比Serializable性能高,所以如果要存储大量数据时,推荐使用Parcelable。

2)Serializable在序列化的时候如果所存储的数据量比较大,会产生大量的临时变量,从而引起频繁的GC。

3)Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下。尽管Serializable效率低点,但此时还是建议使用Serializable 。

4) Serializable比Parcelable操作简单便捷。只需要实现Serializable接口即可。

4. Handler定时任务的实现。

1. 定义一个Handler类

Handler handler=new Handler(); 

Runnable runnable=new Runnable() { 

   @Override 

    publicvoid run() { 

       // TODO Auto-generated method stub 

       //要做的事情 

       handler.postDelayed(this, 2000); 

   } 

}; 

2. 启动计时器

handler.postDelayed(runnable, 5000);//每两秒执行一次runnable. 

3. 停止计时器

handler.removeCallbacks(runnable);  

 

经过运行demo测试得出:

Runnable中的handler.postDelayed(this,2000);执行时间为:在外部调用了handler.postDelayed(runnable, 5000);以后。其中执行的时间为:5秒以后开始执行每两秒执行一次runnable中的方法,也就是说。handler.postDelayed(this, 2000);其中后面参数变化以后,按照最后一次改变的参数运行!也可以将2000作为一个变量!

执行handler.removeCallbacks(runnable);后,Runnable会马上停止。


本文出自 CSDN:

https://blog.csdn.net/qq_23275523/article/details/80093081

猜你喜欢

转载自blog.csdn.net/unfinished_story/article/details/80164011