使用集成式Activity快速开发

来源:互联网 发布:mac os x 重装 超慢 编辑:程序博客网 时间:2024/06/14 09:57

Activity在项目中扮演着很重要的角色。经常代表着模块的中心设置是模块本身,所以如果有一些功能集成到Activity中,也许能增加我们的开发效率。这里我介绍一下我平时也在使用的Activity封装:FastActivity

功能1:视图注解绑定

这个功能类似butterknife。绑定属性和方法都使用注解@Bind
@Bind(R.id.avatar)ImageView mAvatar;@Bind(R.id.name)TextView mName;@Bind(R.id.age)TextView mAge;@Bind(R.id.signature)TextView mSignature;@Bind(R.id.settings)public void openSettings(View v){    startActivity(new Intent(this,SecondActivity.class));}@Bind(R.id.avatar)public void changeAvatar(View v){    FastDialog.showListDialog(new String[]{"相机","相册"}).show(getSupportFragmentManager(), new DialogInterface.OnClickListener() {        @Override        public void onClick(DialogInterface dialog, int which){            //使用FastActivity集成的"打开相机"和"相册"会请求(读写存储/照相机)权限            if(which==0) openCamera(mPhotoResultListener);            else openAlbum(mPhotoResultListener);        }    });}

功能2:全局事件注册

如果想在这个界面上开启一个内部的广播监听,来等待某事件的触发,那么只需要使用注解@Event,然后写出执行方法即可(方法参数必须是事件类)
/** * 退出登录事件 * @param eOut 退出事件类 */@Eventpublic void logout(EventLogout eOut){    mAvatar.setImageDrawable(null);    mName.setText("未登录");    mAge.setText(null);    mSignature.setText(null);}

功能3:Android权限6.0权限请求

使用方法requestPermission(String(请求的权限),Runnable(权限成功请求后行为),Runnable(权限请求失败后行为))
requestPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, new Runnable() {    @Override    public void run() {        File f = new File(getExternalCacheDir().getAbsolutePath() + File.separator + "avatar.png");        ImageUtil.saveViewToFile(mAvatar, f); //工具类,保存某视图到文件中    }}, new Runnable() {    @Override    public void run() {        N.showShort(MainActivity.this,"请给于读写存储权限"); //权限申请失败后弹出提示    }});

功能4:开启相机或相册请求相片

FastActivity已内部集成开启相机和相册请求,并且返回相片的路径。
PhotoResultListener mPhotoResultListener=new PhotoResultListener(){    @Override    public void onPhotoResult(String path){        //相片回调,设置到头像中        mAvatar.setImageBitmap(BitmapFactory.decodeFile(path));    }};@Bind(R.id.avatar)public void changeAvatar(View v){    FastDialog.showListDialog(new String[]{"相机","相册"}).show(getSupportFragmentManager(), new DialogInterface.OnClickListener() {        @Override        public void onClick(DialogInterface dialog, int which){            //使用FastActivity集成的"打开相机"和"相册"会请求(读写存储/照相机)权限            if(which==0) openCamera(mPhotoResultListener);            else openAlbum(mPhotoResultListener);        }    });}

功能5:内部线程池和任务链

FastActivity内部会有一个小型的线程池,在Activity被关闭的时候会自动关闭所有任务。适合处理一些在关闭Activity之后就不需要或者不关心的一些任务
使用new TaskChain(任务类型,任务).next(任务类型,任务).next...来构成一条顺序的任务链
//执行  提示-->计算缓存占用-->显示缓存占用startTasks(new TaskChain(TaskChain.TYPE_THREAD_ON_MAIN, new Runnable() {    @Override    public void run() {        mCacheSize.setText("计算中...");    }}).next(TaskChain.TYPE_THREAD_ON_WORK, new Runnable() {    @Override    public void run(){        try {            Thread.sleep(3000); //休眠一段时间,以看出区别        } catch (InterruptedException e) {            e.printStackTrace();        }        mSize= SaveUtil.cacheSize(SecondActivity.this);    }}).next(TaskChain.TYPE_THREAD_ON_MAIN, new Runnable() {    @Override    public void run() {        mCacheSize.setText(Formatter.formatFileSize(SecondActivity.this,mSize));    }}));

效果图



3 0