美文网首页
Android开发笔记

Android开发笔记

作者: 天使君 | 来源:发表于2018-03-06 11:13 被阅读0次

    /* M式编程@小目标 */

    ### M式编程规范

    步骤:1.理清需求 2.设计数据结构和算法 3.对算法进行M化.

    & 设计数据结构包括类的设计,数据库的设计,接口的设计等;

    & 算法是解决问题的各种策略,可借助于数学等各学科知识;

    & 代码要求:函数粒度不超过20行,高内聚,低耦合。

    =======================================================

    ### Android Studio编译优化

    $ studio.vmoptions

    -Xms512m

    -Xmx4096m

    -XX:MaxPermSize=2048m

    -XX:+HeapDumpOnOutOfMemoryError

    -Dfile.encoding=UTF-8

    $ gradle.properties

    #开启守护进程

    org.gradle.damen=true

    ##开启并行编译

    org.gradle.parallel=true

    ##启用新的孵化模式

    org.gradle.configureondemand=true

    ##配置编译时的虚拟机大小

    org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

    $ 编译设置项

    ### 旋转动画

    RotateAnimation ra = new RotateAnimation(

    0f, -180f, // 开始, 结束的角度, 逆时针

    Animation.RELATIVE_TO_SELF, 0.5f,  // 相对的x坐标点(指定旋转中心x值)

    Animation.RELATIVE_TO_SELF, 1.0f); // 相对的y坐标点(指定旋转中心y值)

    ra.setDuration(500);

    ra.setFillAfter(true); // 设置动画停留在结束位置

    ra.setStartOffset(delay); // 设置动画开始延时

    ra.setAnimationListener(new MyAnimationListener()); // 添加监听

    layout.startAnimation(ra);

    ### 文件操作

    // 保存数据

    File file = new File("/data/data/com.itheima.login/info.txt");

    FileOutputStream fos = new FileOutputStream(file);

    String info = qq + "##"+ pwd;

    fos.write(info.getBytes());

    fos.close();

    // 读取数据

    File file = new File("/data/data/com.itheima.login/files/info.txt");

    FileReader fr = new FileReader(file);

    BufferedReader br = new BufferedReader(fr);

    String info = br.readLine();

    ### Android Studio运行加速和优化

    & 修改此文件: studio64.vmoptions

    -Xms2048m  

    -Xmx2048m  

    -XX:MaxPermSize=2048m  

    -XX:ReservedCodeCacheSize=1024m 

    ### MVP模式详解

    MVP(Model-View-Presenter,模型-视图-表示器)模式则是由IBM开发出来的一个针对C++和Java的编程模型,大概出现于2000年,是MVC模式的一个变种,主要用来隔离UI、UI逻辑和业务逻辑、数据。也就是说,MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。

    (1) View :负责绘制UI元素、与用户进行交互(在Android中体现为Activity);

    (2) View interface :需要View实现的接口,View通过View interface与Presenter进行交互,降低耦合,方便进行单元测试;

    (3) Model :负责存储、检索、操纵数据(有时也实现一个Model interface用来降低耦合);

    (4) Presenter :作为View与Model交互的中间纽带,处理与用户交互的负责逻辑。

    ### EventBus

    EventBus是由greenrobot 组织贡献的一个Android事件发布/订阅轻量级框架。EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求都可以通过EventBus实现。

    发布消息:EventBus.getDefault().post(new MessageEvent(“name”,”password”));

    接收消息:可以有四种线程模型选择

    @Subscribe(threadMode = ThreadMode.MAIN)

    public void messageEventBus(MessageEvent event){

        tv_result.setText("name:"+event.name+" passwrod:"+event.password);

    }

    ### RxAndroid教程

    RxJava最核心的两个东西是Observables(被观察者,事件源)和Subscribers(订阅者)。Observables发出一系列事件,Subscribers处理这些事件。这里的事件可以是任何你感兴趣的东西,触摸事件,web接口调用返回的数据等等。

    在观察者模式中,必须实现两个关键的 RxJava 接口:观察者 Observer 和被观察者 Observable。当被观察者的状态改变,所有订阅了的观察者对象都会被通知。

    Observable 接口有一个 subscribe() 方法,每个观察者调用这个方法来订阅通知。 

    在 Observer 接口中有 3 个方法会被 Observable 调用:

    onNext(T value) 方法:提供一个类型为 T 的新对象给观察者

    onComplete() 方法:当被观察者发送完这个对象之后通知给观察者。

    onError(Throwable e) 方法:通知观察者被观察者发生了一个错误。

    ### Otto使用姿势

    Android事件总线,使用这个库可实现组件之间的通信.

    Bus – 管理注册、注销和发布事件

    @Produce – 标记该方法是生产者,产生的事件内容为该方法的返回值

    @Subscribe – 标记该方法是订阅者,表示订阅了一个事件,方法需要修饰符为public,而区分不同的订阅者是通过方法的参数来区分的,且订阅了某事件的所有订阅者都可以收到该事件

    register(Object obj) – 注册,订阅事件前都需要注册

    unregister(Object obj) – 注销,放弃之前所有事件的订阅

    post(Object event) – 发布一个事件,这个事件会被所有标记了@Subscribe注解的方法获得

    ### GreenDAO的使用

    GreenDAO是一个开源的安卓ORM框架,能够使SQLite数据库的开发再次变得有趣。它减轻开发人员处理低级数据库需求,同时节省开发时间。 SQLite是一个令人敬畏的内嵌的关系数据库,编写SQL和解析查询结果是相当乏味和耗时的任务。通过将Java对象映射到数据库表(称为ORM,“对象/关系映射”),GreenDAO可以将它们从这些映射中释放出来,这样,您可以使用简单的面向对象的API来存储,更新,删除和查询数据库。

    简单的讲,GreenDAO 是一个将对象映射到 SQLite 数据库中的轻量且快速的 ORM 解决方案。

    关键步骤:创建好@Entity注解的实体类后,在Gradle中找到greendao<脚本>并且build,程序将会对实体代码进行标准化.

    会自动创建下面三个类在你指定的包下面: <真几巴强大,简直受不了!!!>

    DaoMaster: 定义了数据库创建和操作的方法。

    DaoSession: 提供用于访问数据库的 DAO 类。

    UserDao: 封装用户表,并为其定义查询等操作。

    & 插入一条数据

    mDaoSession = new DaoMaster(new DaoMaster.DevOpenHelper(this,DATABASE_NAME).getWritableDb()).newSession();

    UserBean userBean = new UserBean(1L,"cmc","123456",24);

    mDaoSession.getUserBeanDao().insert(userBean);

    ### FastJson操作数据

    //将对象转为json串7 String json=JSON.toJSONString(student);8 Log.e("ObjectToJson",json);

    //将json转为对象 参数1json  参数2对象类型2 Student student=JSON.parseObject(json,Student.class);

    只有一句话 就完成了 简单到爆有没有   感谢马云粑粑!!!

    ### okhttp使用指南

    在使用OKHttp之前,首先要先了解如下几个比较核心的类:

    OkHttpClient:客户端对象

    Request:访问请求,Post请求中需要包含RequestBody

    RequestBody:请求数据,在Post请求中用到

    Response:即网络请求的响应结果

    MediaType:数据类型,用来表明数据是json,image,pdf等一系列格式

    client.newCall(request).execute():同步的请求方法

    client.newCall(request).enqueue(Callback callBack):异步的请求方法,但Callback是执行在子线程中的,因此不能在此进行UI更新操作

    public void okhttp_get(){

        final Request request = new Request.Builder().url("http://www.baidu.com").get().build();

        okHttpClient.newCall(request).enqueue(new Callback() {

            @Override

            public void onFailure(Call call, IOException e) {

                Log.e("okhttp-GET","网络请求失败");

            }

            @Override

            public void onResponse(Call call, Response response) throws IOException {

                Log.i("success",response.body().toString());

            }

        });

    }

    ### Android Service使用详解

    Service是Android系统中的四大组件之一,主要有两个应用场景:后台运行和跨进程访问。Service可以在后台执行长时间运行操作而不提供用户界面,除非系统必须回收内存资源,否则系统不会停止或销毁服务。服务可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行。 此外,组件可以绑定到服务,以与之进行交互,甚至是执行进程间通信 (IPC);需要注意的是,Service是在主线程里执行操作的,可能会因为执行耗时操作而导致ANR.

    其他组件调用startService()方法启动一个Service。

    其他组件调用bindService()方法绑定一个Service。

    ### Broadcast使用的一般步骤

    1)实现一个广播接收器

    public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "received in MyBroadcastReceiver", Toast.LENGTH_SHORT).show();  } }

    2)注册广播

    intentFilter = new IntentFilter();

    intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");

    myBroadcastReceiver = new MyBroadcastReceiver();

    registerReceiver(myBroadcastReceiver, intentFilter);

    3)发送广播

    Intent intent = new Intent("android.net.conn.CONNECTIVITY_CHANGE");

    sendBroadcast(intent); // 发送广播

    ### Butter Knife的使用

    & Butter Knife常用于View控件的绑定.

    class ExampleActivity extends Activity {

      @BindView(R.id.user) EditText username;

      @BindView(R.id.pass) EditText password;

      @BindString(R.string.login_error) String loginErrorMessage;

      @OnClick(R.id.submit) void submit() {

        // TODO call server...  }

      @Override public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.simple_activity);

        ButterKnife.bind(this);

        // TODO Use fields...  }

    }

    ### RecyclerView的使用

    如果你想使用RecyclerView,需要做以下操作:

    RecyclerView.Adapter- 处理数据集合并负责绑定视图

    ViewHolder- 持有所有的用于绑定数据或者需要操作的View

    LayoutManager- 负责摆放视图等相关操作

    ItemDecoration- 负责绘制Item附近的分割线

    ItemAnimator- 为Item的一般操作添加动画效果,如,增删条目等

    可以看到对RecylerView的设置过程,比ListView要复杂一些,这也是RecylerView高度解耦的表现,虽然代码抒写上有点复杂,但它的扩展性是极高的。在了解了RecyclerView的一些控制之后,紧接着来看看它的Adapter的写法,RecyclerView的Adapter与ListView的Adapter还是有点区别的,RecyclerView.Adapter,需要实现3个方法:

    ①onCreateViewHolder()

        这个方法主要生成为每个Item inflater出一个View,但是该方法返回的是一个ViewHolder。该方法把View直接封装在ViewHolder中,然后我们面向的是ViewHolder这个实例,当然这个ViewHolder需要我们自己去编写。直接省去了当初的convertView.setTag(holder)和convertView.getTag()这些繁琐的步骤。

    ②onBindViewHolder()

         这个方法主要用于适配渲染数据到View中。方法提供给你了一个viewHolder,而不是原来的convertView。

    ③getItemCount()

          这个方法就类似于BaseAdapter的getCount方法了,即总共有多少个条目。

    ### adb指令集

    $ adb devices  # 列举当前连接的调试设备

    $ adb logcat -c  # 清除手机的log buffer

    $ adb install ~/Downloads/nzcp5.apk  # 安装apk

    $ adb push ~/Desktop/temp.trace /sdcard/data/ # 拷贝本地文件到调试设备

    $ adb kill-server  # 常与adb start-server联用

    $ adb shell  # 进入调试设备的Shell环境

    $ adb tcpip 5555 # 开启远程调试模式

    $ adb connect  # 通过wifi进行调试

    $ adb shell am start # 根据Intent指向启动Activity

    ### Android常用命令行

    $ ps -ef | grep java # 查找指定进程

    $ kill -9 进程号 # 彻底杀死某个进程

    $ tail -100f catalina.out # 查看倒数100行数据,tail是查阅正在改变的日志文件

    $ ssh root@192.168.61.10 # 远程登录

    $ java -jar test.jar  # 执行jar包

    $ curl -I http://www.baidu.com # http请求命令行工具,curl -X GET url,GET请求

    $ scp -r root@IP:/home/nzcp.apk  /root/Desktop # scp从远端拷贝文件到本地

    ========================== 附录 ================================

    & 抓紧时间积累经验,将任务划分为一个一个的小目标来完成.经验最重要!!!

    *** 常用的第三方框架 ***

    implementation 'com.android.support:recyclerview-v7:26.1.0'

    implementation 'com.jakewharton:butterknife:8.8.1'

    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

    implementation 'com.squareup.okhttp3:okhttp:3.9.1'

    implementation 'com.alibaba:fastjson:1.1.68.android'

    implementation 'org.greenrobot:greendao:3.2.2'

    implementation 'org.greenrobot:eventbus:3.1.1'

    相关文章

      网友评论

          本文标题:Android开发笔记

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