美文网首页Android开发Android技术知识Android开发
Intent利用Parcelable传递数据:一道面试题引发的血

Intent利用Parcelable传递数据:一道面试题引发的血

作者: 卖臭豆腐的王致和 | 来源:发表于2018-06-19 09:10 被阅读54次
转载请注明原创出处,谢谢!

起因

先介绍一下我自己的情况,大学专科应届生,3年Java学习,2年Android学习,利用实习的时间,去达内又培训Android4个月,软件专业。由于利用实习时间去培训,所以造成了一个比较尴尬的结果,0工作经验。。。
但投出去的简历还不至于石沉大海,有了一个面试机会,面试过程中的问题,接下来几天,会给大家写出来,今天就来第一道。

  • 面试官:Intent可以传递什么类型数据?
  • 我的内心世界:哈哈。我刷过这到面试题,基本的数据类型,Bundle,Serializable对象,Parcelable对象等等。
  • 我的回答:什么都可以!
  • 面试官:(懵了,但好像想抢救一下我)Intent怎么传递对象,有没有不能传的?
  • 我的回答:实现Serializable或者Parcelable接口。。。Activity之间利用Intent可以实现任何数据的传递。
  • 面试官:(迷之微笑,诡异目光!)

经过

回家之后,开始反思自己今天的面试问题,发现了这个问题回答的不是很完美。但我的回答没错啊,利用Intent可以实现任何数据的传递

接下来开始我的论证

  • 传递对象用Serializable还是Parcelable,我选Parcelable,虽然Serializable的方式比较简单,但由于把整个对象进行序列化,因此效率会比Parcelable方式低一些。
  • Parcelable实现好难,怎么写?
    写什么写?
    打开File -> Settings -> Pugins -> Browse Repositories 如下,输入Android Parcelable code generator:
    自动化实现Parcelable插件.PNG
    安装好了之后重启
  • 打开你写的Bean类
右键空白,选择Generate,选择Palcelable.png
选择需要的属性.png

OK,搞定,看最终代码

import android.os.Parcel;
import android.os.Parcelable;

public class Student implements Parcelable {
    private String name;
    private int age;
    private String other;

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(this.name);
        dest.writeInt(this.age);
        dest.writeString(this.other);
    }

    public Student() {
    }

    protected Student(Parcel in) {
        this.name = in.readString();
        this.age = in.readInt();
        this.other = in.readString();
    }

    public static final Parcelable.Creator<Student> CREATOR = new Parcelable.Creator<Student>() {
        @Override
        public Student createFromParcel(Parcel source) {
            return new Student(source);
        }

        @Override
        public Student[] newArray(int size) {
            return new Student[size];
        }
    };
}
  • 回到问题,发现,只要是实现Palcelable的,就可以被Intent传递,那还有什么是Intent不能传递的?
    • File,你不会传递文件地址吗?
  • Bitmap,把它变成图片,你不会传递文件地址吗?
  • 你不会传递文件地址吗?
  • 貌似Intent传递数据,有大小限制,具体大小不清楚,没见过这方面的错误,看一个帖子,一个值,很烦!
  • 附传递和接收代码
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("student_data", new Student());
startActivity(intent);
Student student = (Student) getIntent().getParcelableExtra("student_data");

结果

我的论证个人认为成功了,但我的面试2个字母形容:GG!
有可能是我回答的问题,漏洞太大,太惊人了吧。
他问我坚持了这么久是为了什么 ?
我说我没有坚持因为喜欢所以快乐!

相关文章

网友评论

    本文标题:Intent利用Parcelable传递数据:一道面试题引发的血

    本文链接:https://www.haomeiwen.com/subject/hjfmeftx.html