对android开发者 小程序_android 开发者模式动画程序动画时长 - CSDN
  • 前言首先要声明的事,我是一名 Android 开发者,之前基本没有前端开发经验,甚至连 JS ,HTML 都是为了开发小程序现学的一些皮毛——所以文章中所提到的一些点也许在资深前端开发者看来只是小case,但是站在一个 ...

    前言

    首先要声明的是,我是一名 Android 开发者,之前基本没有前端开发经验,甚至连 JS ,HTML 都是为了开发小程序现学的一些皮毛——所以文章中所提到的一些点也许在资深前端开发者看来只是小case,但是站在一个 Android 开发者的角度来看确实是大坑。

    前面就不说太多东西了,文章的末尾再谈谈我对小程序的一些看法——这篇文章主要是谈谈在开发小程序的过程中遇到的一些坑。

    PS:推荐一下我写的一个微信小程序版的Gank客户端:wechat-weapp-gank

    gif

    正文

    1,获取小程序开发工具并正确安装?

    最近在一些地方看到很多人在入小程序坑的第一步就出现了很多的问题,其实很早之前(22号)关于怎样搞定小程序的开发工具就已经有比较好的资料了,大家可以直接去看一下然后照着做,基本上就没啥问题:获取小程序开发工具并正确安装的教程

    2,直接在微信开发工具上写代码?

    目前来讲,我们只能在微信的开发工具上编译小程序的代码,但是这并不意味着我们必须要在那个开发工具上写小程序的代码——用过那个开发工具的人就会知道,那个开发工具并没有多好用,代码提示挺弱鸡的,而且没有自动保存是硬伤。

    那么怎么办呢?我们完全可以在别的工具里面写代码然后在小程序的开发工具里面编译。我试过 sublimewebstorm , 都是可以在上面开发的,但是最后还是发现 ws 更好用。我就不讲 sublime 怎么用了,大家只需要直接在里面打开项目文件夹然后点右下角选择当前的语言就可以了。接下来着重讲一讲如何在 ws 里面编写小程序代码。

    首先选择小程序的目录在 ws 里面打开,这是很简单的。但是这个时候打开里面的文件之后你会发现,除了 js 代码它能认出来之外,其他的代码他都并不能够认出来——主要是 .wxml.wxss 文件。为什么呢?因为虽然 .wxml.html 文件很像,.wxss 文件和 .css 文件很像,但是编译器并不知道!这样一来,我们就无法在这两种文件里面享受 ws 强大的代码提示功能了——我们能接受这种事么?果断不能!那么接下来我们应该怎么办呢?告诉编译器,.wxml 格式的其实是 HTML 文件,.wxss 格式的其实是 CSS 文件。

    告诉编译器,*.wxml* 格式的其实是 *HTML* 文件

    上图把做这件事的流程讲的很详细了,.wxss 文件的转化同理。这样做了之后,编辑器就会知道他们的真实面目,然后就可以有棒棒的代码提示了(但是请注意,有写微信自己写的东西编辑器不仅没有代码提示反而会报错,不管他就好了)!接下来就可以直接 ws 一个桌面小程序开发工具一个桌面,在 ws 里面写了代码直接划过去点编译了。

    3,跳转page的时候怎么传递数据?

    小程序给我们开放了很好的接口来进行页面之间的跳转:

    界面之间跳转

    但是在这个地方微信官方对于这一个接口并没有太多的描述,只是简简单单的给了我们一行代码:wx.navigateTo({url: "test ? id = 1"}); ,其实这里这样写是有些难以理解的——test 是个什么鬼 ? id 是个什么鬼?中间那个问号是个什么鬼?这都是些什么鬼?

    反正我看到的时候是一头雾水的。不过还好,经过一些摸索,终于知道了他们是啥。首先,代码里的 test 代表要跳转到的 page 的url 地址。比如:

    要跳转到这个页面

    那么代码就应该是:

    wx.navigateTo({url: "/pages/specific/specific"});

    聪明的人可能已经发现了,上面的代码没有了示例代码里面 ? id = 1 的部分,怎么回事,是我写错了么?并不是。这一部分其实是跳转 page 时用来传值的关键方法,并不必需,但很有用。

    * ? 是一个分隔符一样的东西,它的后面就是所有要传到目标 page 的值。而这些值是通过键值对来一一对应的,每个键值对之间用 & 隔开。但是要注意的是,似乎这种方式传值只能传 String 过去,不是 String 类型的值传过去之后也会被转化为 String 。*比如,我传了个 arrayjson 过去:

    var arrayData = ["firstData" , "secondData"];
    var jsonData = {first: "firstData" , second: "secondData"};
    wx.navigateTo({url: "/pages/specific/specific ? data: " + arrayData + "&json=" + jsonData});

    结果目标page里接受到的是:

    //目标page的onLoad方法
    onLoad: function (options) {
            //结果是:firstData , secondData
            console.log(options.data);
            //结果是:f
            console.log(options.data[0]);
            //结果是:[object Object]
            console.log(options.json);
            //结果是:undefined
            console.log(options.data.first);
    
            //很显然,被转化了  
    }

    上面其实也演示了如何在目标 page 里面接收传过来的数据,直接在 onLoad() 里面的 options 取就可以了。

    另外,其实更多的时候我们的需求并不是直接传一个固定的参数到目标 page 里面去,而是根据用户的一些操作传递不同的值到目标 page 里面去,这个时候该怎么办呢?要知道,我们是没有办法获得组件的(这点太坑了,没有 windowdocument)。这个时候,我们可以通过 dataset 来通过绑定组件数据达到目的。什么?你不知道 dataset 是什么东西?

    dataset

    多读书,多看报,多看文档少睡觉。

    4,某些图片无法加载?

    这个坑真的是深坑,可能很久很久都不会遇到,但是一旦遇到真的很蛋疼。

    我拿来练手的项目是 Gank.io 的客户端,而 Gank 网站上的图片都是寄放在新浪图床上的,默认的存储的 url 是 http://ww{1 || 2 || 3 || 4}.xxxxx.xxxxx.jpg然后在小程序里死活都加载不出来这些图片!!!

    我一开始不知道到底是小程序的 <image> 标签的问题还是图片的问题,就找了很多地方的图片来做测试,包括 CSDN 上的,简书上的,github 图床上的,结果是这些图片都可以正常显示——甚至新浪微博上的,一些人的头像,都可以显示!后来我发现,只要 URL 是 ww+数字 开头的图片,都不能正常的显示!这也太坑了。。。后来我就在思考怎么解决这个问题——要么改变 标签,他自身肯定是有问题的,可能对某些来源的图片不太友好;要么改变图片,让它去适应这个 标签。这两方面要改其实都挺难的,但是显然第一种方式基本上是不可能的,就只能在第二种方式上去下功夫。

    最后经过不断地尝试,我总结了很多规律,最后通过把图片的 URL 由 ww+数字变成 ws+数字 解决了这个问题,让图片得以显示在小程序上。比如:

    本来的URL:
    http://ww1.sinaimg.cn/large/610dc034jw1f87z2n2taej20u011h11h.jpg
    变换之后的URL:
    http://ws1.sinaimg.cn/large/610dc034jw1f87z2n2taej20u011h11h.jpg

    不要问我为什么这样改了就可以显示了,因为我也不知道。。。太神奇了。。。

    5,this.setData() 显示没这个方法?

    首先想要说的是,作为一个 Android 开发者,我非常不适应小程序的数据与控件绑定的方式。在 Android 开发的时候,我们是可以直接获得控件然后对控件做数据绑定的工作的,而在小程序里,我并不能够直接获得控件的对象,所有的数据绑定与动态修改只能通过维护 Page 里面的 data{} 以及调用 setData() 方法来进行,我不好评判这两种方式的优劣,只能说真的很不习惯。

    但是有些和我一样以前没怎么接触过前端开发的朋友在做这个的时候就有可能会踩坑了——setData() 是 Page 这个层级上的方法,并不是在任何地方调用 this.setData() 方法都可以顺利的得到我们预期的结果的。比方说:

    Page({
        onLoad: function (options) {
            wx.request({
                url: Constant.GET_URL,
                success: function (res) {
                    this.setData({...});
                }
            });
        },
    });

    我在 wx.request() 的回调接口里面 success() 里面写 this.setData({...}),就不能完成预期操作,程序会报错说没有 setData() 这个方法,因为这个时候 this 获取到的已经并不是 Page 了,上下文已经发生了变化,那么当前层级没有 setData() 方法就很正常了。那么怎么解决这个问题呢?像这样:

    Page({
        onLoad: function (options) {
            that = this;
            wx.request({
                url: Constant.GET_URL,
                success: function (res) {
                    that.setData({...})
                }
            });
        },
    });
    
    var that;

    和一开始的区别在于多了一个全局变量 that,并且在 onLoad() 方法里面对它进行了赋值,使它等于 this。这样的话,我们就可以在这个 Page 的任何地方调用 that.setData() 来动态的改变控件的属性了。

    结语

    本来是还有一些问题要谈一谈的,但是写到这里篇幅已经挺长的了,就干脆把其他的放到下一篇里面算了。剩下的问题还有:

    • 后台接收数据需要表单?小程序并不能很方便的获得数据的表单,甚至 <form>标签获得的数据也不是。
    • 解析 HTML 块?没有document,没有window,解析它简直是一种折磨。
    • <form/> 里面无法获取 <picker/> 的取值?明明文档里有说在 <form/> 里面是可以支持 <picker/> 的,结果你会发现死活无法获得他的值。
    • 要实现多层列表?有的时候也许需要在一个列表项的每一项下面又有一个子列表,在小程序里怎么做?
    • 如何方便愉快的实现类似 Java 里面的静态变量的效果?没有一个专门的类存放 static final 的值供其他地方使用感觉全身都不自在。

    接下来我想谈一下我对小程序的看法。

    • 第一点,不管小程序能不能在未来的时间里在移动端大放异彩,学习它,掌握它,都是没有任何坏处的。
    • 第二点,就目前的版本而言,小程序的表现让我有些失望——实在是太过封闭。开发小程序就感觉像是在微信给我们划定的一个小圈子里兜兜转转,在圈里也许我们能得到很良好的开发体验,但是一步都出去不得。
    • 第三点,在性能与便捷之间,最终往往会是便捷取胜。
    • 第三点,能用 js 开发的,最终都会用 js 开发。

    多谢各位看官看到这,顺便去点个star吧:wechat-weapp-gank

    展开全文
  • 转眼间微信小程序已经推出好几个年头了,作为一名Android开发者,一直想尝试下;正好赶上公司策略调整,在开发完App后领导想着在开发一个小程序版,基于微信庞大的用户量,微信小程序成为了首选;在完成了两三个微信...

    前言

    转眼间微信小程序已经推出好几个年头了,作为一名Android开发者,一直想尝试下;正好赶上公司策略调整,在开发完App后领导想着在开发一个小程序版,基于微信庞大的用户量,微信小程序成为了首选;在完成了两三个微信小程序后,有了些心得体会,特此记录下来。鉴于篇幅,这里只说说一些基本的体会,后续会给出更多实际遇到的问题解决。

    开搞

    首先我们得先看下官方教程:微信小程序官方文档
    如果只是体验不发布代码的话就没必要申请账号了,还有不得不说用惯了AS后再用微信的开发工具难免会吐槽一番,当然也可以使用其他的工具然后安装插件开发,这里就不做讨论了。

    布局

    1、在 Android里面布局代码都是写在xml里面;在小程序里面则是通过wxml(页面)+ wxss(样式);当然小程序样式也可以都写在wxml里面,类似:

    <view style='width:35rpx;height:35rpx;float:right;'></view>

    通过style属性也可以写样式,但是一两个还行,多了就会显得很乱。

    2、Android里面子view都是在viewgroup 里面;小程序里面<view>标签既可以是子view,也可以是viewgroup,通过wxss能展示各种样式,也能显示文本。
    例如:显示竖向排列的两个文本。

    在Android里面:

    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">Ï
                <TextView
                    android:text="test"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"/>
                <TextView
                    android:text="test"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"/>
       </LinearLayout>

    小程序里面:

    wxml:

    <view class="parent">
        <text>test</text>
        <text>test</text>
    </view>

    wxss:

    .parent{
      display: flex;
      flex-direction: column;
    }

    可以说小程序里面的flex布局和Android的LinearLayout布局很相似,flex也是推荐的布局,具体可以看教程:Flex布局教程 个人感觉写的很好。

    如果要想元素都重叠,类似Android里面的FrameLayout,则需要设置position:absolute,然后通过margin、padding来定位到合适的位置。不得不说小程序的布局相比Android来说还是麻烦不少的,只能通过多练习来熟悉了。。。

    3、Android里面可以通过<include> 来引入布局,小程序里面也有template布局模版,通过<import> 引入即可。

    4、小程序里面布局推荐使用rpx作为尺寸单位。

    业务

    1、Android的业务逻辑都是写在Java文件里面,小程序里面都是写在js里面;同样的类似Android的页面生命周期,小程序也有生命周期:

      onLoad: function(options) {
        // 页面初始化
      },
      onReady: function() {
        // 页面渲染完成
      },
      onShow: function() {
        // 页面显示
      },
      onHide: function() {
        // 页面推到后台
      },
      onUnload: function() {
        // 页面关闭
      },

    小程序不像Android里面可以监听页面的返回键,所以要在页面返回时处理业务可以在onUnload中处理。

    2、与Android中Application类相似,小程序中app.js相当于全局入口,如果开发者有需要在小程序启动时执行的操作,就可以在 onLaunch 方法中执行。
    app.js还提供了一个 globalData,用来存储整个小程序使用期间的公共数据。
    在其他页面可以通过 getApp() 方法用以获取小程序的 App 实例,来使用全局公共数据。

    3、如果有些需要存储的简单数据,类似Android中的SharedPreferences,小程序可以使用wx.setStorageSync("key", value); 存储;wx.getStorageSync("key"); 取出;

    4、页面之间的数据传递在小程序里面只能通过路由的方式,就是在跳转链接拼接上要传递的数据:
    传数据:

    //let obj = JSON.stringify(obj);
    wx.navigateTo({
          url: '/pages/index/index?id=' + id,
        })

    接受:

     onLoad: function(options) {
     // let obj = JSON.parse(options.obj);
        let id = options.id;
      }

    如果要传递对象,则可以在传递前使用JSON.stringify(obj); 将数据转成字符串,在接受时使用JSON.parse(obj); 转换回对象;

    5、数据刷新;在处理完数据后我们会用this.setData({...}) 来更新数据源,但是很多初学者都会犯一个错误,看如下错误代码

    wx.request({
                url: "request_url",
                success: function (res) {
                    this.setData({...})
                }
            });

    按照上面写程序就会报错,再看正确代码:

    let that = this;
    wx.request({
                url: "request_url",
                success: function (res) {
                    that.setData({...})
                }
            });

    两者区别在于多了一个变量 that,并且在 onLoad() 方法里面对它进行了赋值,使它等于 this。其实说白了就是一个作用域的问题;其实在Android里面我们也遇到过,就是在点击事件里面跳转设置this的时候,我们都会写上类名,类似:Intent intent =new Intent(MainActivity.this,TestActivity.class);

    6:事件拦截:在Android里面会有很多事件拦截处理;小程序里面也不例外。看如下小程序布局:

    <view bindtap="onclick">
       <image bindtap='tapclick'></image>
    </view>

    如上我给子父view都设置了bindtap点击事件,这个时候点击下去会发现两个事件都执行了,这在小程序里面称为事件冒泡;要想image被点击,view不被点击则得使用catchtap 属性;修改如下:

    <view bindtap="onclick">
       <image catchtap='tapclick'></image>
    </view>

    这样view的点击事件就不会响应了。
    ps:还有些情况是页面层级导致的,需在wxss里面使用z-index 调整页面层级。

    结语

    好了,今天的分享就到这里了,后续会分享一些实际使用过程中遇到问题的解决方案。
    Ps:总的来说写了一段时间的js后发现这种弱语言写起来真的挺舒服,好多数据类型方面都不需要考虑,同时带来的坏处就是不便于查看调试。

    最后自己闲下做了个实用的小工具,有兴趣的可以试试。
    这里写图片描述

    展开全文
  • 1.1 微信小程序 微信小程序近期可谓是动作频出,仅最近新增的能力就有: 允许个人开发者申请注册小程序、 公众号可以打开小程序、 可以在 App 分享、 ...种种迹象表明,微信对小程序的期望值...

    1.1 微信小程序

    微信小程序近期可谓是动作频出,仅最近新增的能力就有:

    1. 允许个人开发者申请注册小程序、
    2. 公众号可以打开小程序、
    3. 可以在 App 分享、
    4. 支持识别图片二维码打开小程序、
    5. 可以支持第三方平台配置、
    6. 新增数据分析接口、
    7. 代码包大小从1M扩大到2M、
    8. 推出小程序码、
    9. 公众号关联小程序新规则、
    10. 公众平台新增快速创建小程序、
    11. ……

    种种迹象表明,微信对小程序的期望值是很大,所以在它推出的几个月效果没到达预期的情况下,之前的很多『克制』也就逐渐变成『放肆』了 —— 不过不管小程序以后的发展到底怎样,对我们开发者来发,多了解一些总是没有坏处的。

    1.2 为什么要写这篇文章

    他山之石,可以攻玉。
    对于是技术人来说,多了解一些不同的技术、不同的开发模式、不同的架构思想,提高技术『广度』,对于自己的成长是十分必要的。
    所以,本文就是从一个 Android 开发者的角度,从项目工程方便切入,来分析一下『微信小程序』跟『Android App』开发上的一些异同。
    『微信小程序』开发是一个相对较新的技术,希望通过本文,能让你对它多一些了解。

    1.3 本文的目标读者

    因为内容是从Android开发的角度来谈的,所以我假设你已经对 Android 开发比较熟悉了。并且对微信小程序的开发也比较感兴趣,如果要是再能有些 javascript、css 的基础的话那就更好了!

    2. 开发语言的对比

    2.1 Android 的开发语言

    Android 开发我们已经比较熟悉——

    主要开发语言是 Java(当然还有 Kotlin/Scala/Groovy,暂时不在本文讨论的范围内);
    另外使用 xml 文件来描述界面;
    使用 AndroidManifest.xml + gradle 文件来配置项目;

    2.2 小程序的开发语言

    作为对比,进行微信小程序开发所用的语言是这些——
    主要开发语言是 javascript;
    使用 wxml + wxss 文件来描述界面;
    使用 app.json + app.wxss 文件来配置项目;

    2.3 wxml、wxss 是什么?

    wxml(WeiXin Markup Language) 基本约等于是 xml。微信之所以没有直接使用 xml ,可能是为了以后扩展方便一些(野心很大)。
    同理,wxss(WeiXin Style Sheets) 基本约等于是 css。也是微信扩展了一些功能,比如统一的尺寸单位 rpx。

    2.3.1 小程序为什么要使用 wxml + wxss 来描述页面?

    对于 Android 来说,对于页面的描述基本上在 xml 中定义的,比如:

    <FrameLayout
    android:id="@+id/layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <TextView
      android:id="@+id/textViewHello"
      android:textSize="20sp"
      android:textColor="#f00"
      android:layout_width="200dp"
      android:layout_height="wrap_content"
      android:text="Hello World!"/>
    </FrameLayout>

    这是一个简单的典型的示例,这个文件就是描述了两部分内容:

    页面结构: 一个 id 为 layout 的 FrameLayout, 它的内部包含一个 id 为 textViewHello 的 TextView 。

    页面样式: FrameLayout 和 TextView 各自的属性:width、height,TextView 还有字号、颜色、文字内容等。
    而微信小程序所使用的 wxml + wxss 方式:
    some.wxml:

    <view class="userinfo">
    <image class="userinfo-avatar" />
    <text class="userinfo-nickname">张三</text>
    </view>

    some.wxss:

    .userinfo {
    display: flex;
    flex-direction: column;
    align-items: center;
    }
    .userinfo-nickname {
    width: 128rpx;
    color: #aaa;
    }
    

    很明显可以看出:wxml 是负责了页面结构的展示;而 wxss 则负责了对页面样式的定义。
    这种把结构和样式分离的做法,其实是延续了网页开发中的习惯(html + css)。
    这样做的好处起码有两个:
    一是使代码的职责划分更加明确,结构清晰。
    二是可以避免许多重复的代码。(你在写 Android 的 xml 文件时,有没有经常碰到有许多重复的属性,需要抽离成一个 style 出去的?这就是基本是样式表的思想了)

    3. 工程结构对比

    3.1 小程序的工程结构

    这里写图片描述

    ——看起来还是挺简单的结构

    这里写图片描述

    3.2 app 相关: app.js 、 app.json 、 app.wxss

    这三个文件用以描述小程序 app 相关的内容,他们的命名是固定这样的,位置也固定是在根目录下。

    3.2.1 app.js

    app.js 基本相当于 Android 中的 Application 类,文件中主要是有一个 App()函数,来进行小程序的初始化操作。

    它提供了一些关于整个小程序生命周期的回调函数: onLaunch、onShow、onHide、onError 等。 比如如果开发者有一些需要在小程序启动时执行的操作,就可以在 onLaunch 函数中执行。

    【对比 Android】我们在 Application 的 onCreate 函数中的初始化操作。

    它提供了一个 globalData,用以存储整个小程序使用期间的公共数据。

    【对比 Android】有时候我们也会在自定义的 Application 放一些数据,供不同的页面来使用。

    小程序提供了一个全局的 getApp() 方法用以获取小程序的 App 实例。

    【对比 Android 】想一下 getApplication() 方法~ :-D

    3.2.2 app.json

    app.json 的作用跟 Android 中的 AndroidMainifest.xml 文件很相似 —— 都是静态化的配置文件。

    1. 声明、设置各个页面的路径:页面必须要先在这里声明之后才能使用。
    2. 配置页面的样式(导航栏颜色、文字字体等)
    3. 配置底部的Tab栏
    4. 设置通用的TimeOut时间、是否是debug模式等

    【对比 Android 】Activity 也是同样需要在 AndroidMainifest.xml 文件中进行声明,另外 App 的主题也可以在这里设置。

    3.2.3 app.wxss

    app.wxss 定义全局的样式 —— 其定义的样式会作用于每个页面。比如在 app.wxss 中加入:

    text {
      padding:5px;
    }

    就可以给所有的 text 控件添加 5px 的 padding 。
    当然,页面本身的 xxPage.wxss 可以定义局部样式来覆盖全局样式。

    【对比 Android 】Android 中暂时没有类似 app.wxss 的全局设定,我们需要在每个 layout.xml 中定义每个控件的属性,即使可以用 style 文件来抽离一些统一的样式,但还是需要在每个 View 的属性上去设置使用这个 style —— 从这方面看,使用 wxss 更有优势一些。

    3.3 utils 文件夹

    根目录下的 utils 文件夹中有一个 util.js 文件,这个故名思意,是类似于 Java 中的一些工具类的存在。
    utils 文件夹其实是一个非必须的结构,而它之所以出现在官方的 HelloWorld 工程中,是作为一个代表,表明了开发者在这里是可以自定义新的文件夹和结构的。微信小程序作为一个使用 js 来开发的平台,是可以使用许多第三方的 js 库的,对于这些第三方库,以及其他的图片资源等,都可以放到自定义的文件夹中。

    3.4 pages 文件夹

    pages 文件夹下包含两个子目录:index 和 logs ,两个目录的结构都是基本一样的,都是包含四个相同主名称的文件: xx.js、xx.wxml、xx.json、xx.wxss 这几个文件。
    这样的一个典型结构表明它是一个小程序的页面,四个文件的作用分别是:

    1. xx.js : 页面的主要逻辑 【相当于 Android 的 xx.Activity 】
    2. wxml :页面的结构 【相当于 Android 的 布局文件 activity_xx.xml 的结构部分】
    3. wxss :页面的样式 【相当于 Android 的 布局文件 activity_xx.xml 的样式部分】
    4. json :页面的配置,作用跟上文讲的 app.json 作用差不多,但只能配置 window 相关的属性,会覆盖 app.json
      中的同名配置。 在 Android 中 ,xx.Activity 和布局文件
      activity_xx.xml是在不在同一个目录下的,需要使用 setContentView 来把他们相关联。
      但是在微信小程序中,这个工作不需要手动去做,微信强制要求需要一页面相关的四个文件需要命名一致,并且要放在同一个文件夹下。

    4. 视图更新方式对比

    在视图的动态显示上,微信小程序使用了数据绑定(data-binding)的方式。
    如果你之前使用过 AngularJS 或者 Vue.js 等这些流行的 js 框架,那么你肯定对数据绑定并不陌生。它是一种把一个控件的属性绑定到某个数据对象(view-model)的属性的方法,这样在改变数据对象属性的时候,所对应的控件属性也就会相应变化 —— 在开发中,这种方式会使得对 View 层的显示控制变得十分简单、自然。
    基于此,软件工程的流行架构方式也在之前的 MVC、MVP 之外,又多了一个 —— MVVM(Model-View-ViewModel)。
    数据绑定这种方式现在是如此的流行,以致于 Android 官方都出了一个 [Data Binding Library] (https://developer.android.com/topic/libraries/data-binding/index.html) 来支持数据绑定,但是由于成熟度等原因,目前还并没有成为主流,Android 中的主流视图显示方式,还是通过开发者手动给每个控件 set 数据。
    —— 单从这一点上看,微信小程序的开发模式是比原生 Andorid 要『先进』一些的~

    展开全文
  • 最近不管是在微信、QQ群,还是在各大博客网站,都随处听得到Android开发不景气的声音,而现在的大数据、人工智能的火爆程度,很大程度上对Android开发者不免有一定的影响,写这篇文章主要的目的是表达一下自己目前...

    我们的态度是:每天进步一点点,理想终会被实现。

    前言


    想写一篇关于Android开发者忧虑的文章很久了,今天才提起勇气写。最近不管是在微信、QQ群,还是在各大博客网站,都随处听得到Android开发不景气的声音,而现在的大数据、人工智能的火爆程度,很大程度上对Android开发者不免有一定的影响,写这篇文章主要的目的是表达一下自己对目前Android开发的一点看法,仅仅是个人观点。

    Google 2005年8月17就已经收购了Android,距今已经有10余载,纵观这10多年的发展可以说是天翻地覆。Android 全球已经超过10亿部,超过70%以上的市场份额,Android依然是Google的核心,这么大的用户数据是不可能放弃,只能越做越好。可能很多人会说会不会像以前的塞班系统?答案可以很肯定的告诉你不会,有一下几点原因:

    1.塞班闭源,而Android开源

    2.开源,很多公司都在深度定制系统

    3.和10年前对比,现在的Android系统是越来越完善

    4.有了塞班的示例,Google没那么傻会走相同的道路

    5.Android丰富的学习资源、社区

    6.假如没有Android,国内估计就没得小米、锤子等手机 。。。

    个人观点,假如Google没有收购Android,估计Google没有像现在那么出名,也没有现在的辉煌、规模。那么,Android的未来具体究竟会发展成什么样子,智能家居,人工智能,VR技术,AR技术,安防。未来,安卓会更加的人性化和智能化,以及安全化,视觉体验化。

    因此在这样的大环境之下,Android 移动开发必然还是能在众多开发中占领一席之地的,所以Android消亡是不用担心的。

    行业形势


    Android 的形势与环境

    如果你是一个Android开发者的话,你一定听到了很多的风言风语,总结几句话的意思就是Android已经不再火爆了,Android学了出来找不到工作,Android是不是要被遗弃了等等,很多的不顺耳的言论。但是我们不得不承认这样一个事实:

    Android确实不是当年盛况,已经不再像前几年前那么火爆。一种语言如果经历过盛极一时,那么必然有这样的一条曲线,像我们学的正弦曲线先急速上升,然后到达顶点,然后再下降,最后再趋近一个平稳的值。那么这一两年就已经是在一个饱和值之间浮动,因此在这样的形式下,可能对于个人开发者相应的要求就要高一些。以前是只要你会Android四大组件的都是个香饽饽,那样的时代已经过去了,随着人机交互的体验要求,App的用户体验的要求、流畅度等等,已经不可同日而语。在这样的大环境下,那么对我们的Android开发工程师也是同样的改变。

    在这样的情况下,由于饱和,随处都能招到初级的工程师,公司有了选择的余地,所以肯定会去选择更加优秀的,这就必然导致了我们经常说的,Android开发者已经烂大街了,其实不然,只是公司的要求变高,市场饱和,门槛变高而已。所以这就要求我们更加的精于技术,据我了解,中、高级的工程师还是很受欢迎的。

    移动端的发展


    React Native的出现

    移动端在短短几年之间就发展如此迅速,典型的代表就是Android、IOS,发展如此之快,又如此的火爆。既然都是移动端,为什么每开发个APP就需要两个端分别开发,作为IT行业肯定有各方面的大佬会想尽办法来兼容两个端,一套代码,两个端都可以运行;

    那么,肯定知道大名鼎鼎的FaceBook开发的语言React Native,这款语言是能兼容Android、IOS的系统,开发一套代码,可以两个端运行。在这之前一度给开发者带来了多么大的希望,得到了众多开发者的青睐,但是我想又很多的人不知道ReactNative开发到底有没有坑,到底像不像道听途说的,提高了效率,降低了成本,这是我之前看的一篇文章上一位大佬实际开发之后的感受:React Native技术的优劣,有兴趣的老铁可以看看。因此,个人观点,你作为一个Android开发者,学习更多的兼容平台的语言,肯定是加分的。但是也要看你时间、经历等因素,以及适不适合。假如你现在Android都还没学到多少,或者还在初级阶段,然后就想着又去把React Native给学好,我建议先把当前工作中需要的语言学精通,然后再去扩展学习,是最优的抉择。不要看着什么新的出来,都去尝鲜了解个一知半解,最终发现自己没有一项精通的,就得不偿失了。

    Google推出Kotlin

    Google进来在大力推广Kotlin,Kotlin不可否认得到了Google的大力支持,以及语言本身的特点,个人觉得有一下几个特点是很受欢迎的:

    • 代码的大幅度精简
    • 100% 兼容 Java 代码
    • 函数式编程
    • 各种语法糖

    可能有的老铁就会说了,既然kotlin得到了Google的支持,语言又有比Java好的特点肯定会冲击一波;这里就说说我个人的观点:

    • 不要太着急去学习Kotlin,除非你空余时间充足
    • 一个语言替代另一个语言,是需要时间去沉淀,一般需要3~5年时间
    • 既然Kotlin有着诸多的优点,而且完全兼容Java代码,那么等到普及的时候再去也不迟 现在国内、外都是有很多大型的APP依然是Java,想QQ、微信、支付宝等APP,要想突然全部换成kotlin来编写,还是需要时间和成本的。以及总小型公司的老项目也是需要维护等等。
    • Kotlin的三方库可能还是不是那么的完善,未知BUG,社区活跃度等等都是些问题

    综上所述,不可否认Kotlin有极大的可能成为Android开发最流行的语言,但是这还是需要一定时间,所以是否立即转Kotlin开发是否符合你自身,就需要老铁自己考量了。

    Flutter

    什么是Flutter?

    2018年2月27日,在2018世界移动大会上,Google发布了Flutter的第一个Beta版本。Flutter是Google用以帮助开发者在Ios和Android两个平台开发高质量原生应用的全新移动UI框架,可以看一下视频介绍(http://v.youku.com/v_show/id_XMzQyNTE1NDMxMg==.html)。

    有以下几个特点:

    • 热重载(Hot Reload),作为一个菜鸟安卓开发者,能热重载真的太舒服了,利用Android Studio直接一个ctrl+s就可以保存并重载,模拟器立马就可以看见效果,就这一点比原生安卓制作简直不知道高到哪里去了。
    • 一切皆为Widget的理念,对于Flutter来说,手机应用里的所有东西都是Widget,通过可组合的空间集合、丰富的动画库以及分层课扩展的架构实现了富有感染力的灵活界面设计。

    • 借助可移植的GPU加速的渲染引擎以及高性能本地代码运行时以达到跨平台设备的高质量用户体验。 这段介绍是直接抄下来的,虽然我并不知道什么叫可移植的GPU加速的渲染引擎,但是最终结果就是利用Flutter构建的应用在运行效率上会和原生应用差不多。

    但是由于目前主要是使用在UI方面,不清楚后续的发展,我们暂时还是不要盲目的去跟风,毕竟这些还是要很多的大佬去实践,然后不断的优化、提升才能适合我们这些菜鸟级别的去使用。当然我前面也说过,如果时间很充裕,是完全可以去学习尝试的,多学多了解肯定是对自身有益。

    人工智能、大数据的崛起

    作为一个程序猿,那么肯定是知道这两年的人工智能和大数据的发展,不管是国家政府的支持还是IT界的发展,以及世界IT巨头公司,都是在大力发展人工智能、大数据,毕竟人工智能、大数据是被语言未来10年最火的语言。我想有很多人肯定和我一样,不管是点开各大开源网站、技术博客平台、技术交流群可能出现最多的词频就是人工智能,Python自然而然的就是火得一塌涂。

    经常可以看到有很多博主,发布消息Python几月份成为了某某开源社区最火的语言等等,引发的一些的唇枪舌战,我们不讨论。但是我们从另一面可以看得出是有多么的火爆。可能这就导致了很多的Android开发者,或者不止Android开发者,都想去分一杯羹,都想去赶上这个热潮。这里我就说说我个人的几个观点,仅仅个人而言:

    • 了解如今的市场行情,需要掌握什么技能才能找到一份Python开发的工作,现在公司需要什么人才,这个就是你学习的一个方向。

    • 系统的学习规划:你要知道自己每天学习什么,因为接触过的新手比较多,很多人学着学着就放弃,或者他们不知道自己在学习什么,这样非常迷茫一点计划没有,肯定是学不会Python的,所以学习Python要知道每天学习什么,做什么案例。

    • 学习Python如果只靠自己学,基本学了也很难找到工作,现在Python开发的工作普遍很高,要求也高,都需要有工作经验的,如果单靠自己琢磨不仅浪费时间,而且很不专业。

    所以可以想好自己是以后走这方面的路,还是说只是想尝试一下,跟跟风;如果只是跟跟风,我看还是算了吧,你真的闲暇的时候去看看就好,别花太多时间,如果有时间还不如研究在自己的领域,对你可能更加有利,那如果是下决心要转行,那你还是要考虑好当下的适不适合。

    一句话总结


    最后再说说我个人的观点,如果你是大佬,肯定有自己的安排,就不言论,如果像我一样还是菜鸟,那就请你多多还是老老实实的把一门语言精通,毕竟你去公司,老板给你开公司是按照你最精通的一门语言来给你开的,而不是你懂的语言多就给你开的多,你懂的多只能说是你的加分项,而不是必须项。另外,还是要多多关注到开源社区、Google等等网站,随时掌握着最新的消息,随之做应变。

    经过上面的分析,我相信很多人都有自己的观点和主意,但是这里我还是简要的说一下,以上只是我个人的观点,不喜勿喷,感谢,口下留人。

    温馨提示: 我创建了一个技术交流群,群里有各个行业的大佬都有,大家可以在群里畅聊技术方面内容,以及文章推荐;如果有想加入的伙伴加我微信号【luotaosc】 备注一下“加群” 另外公众号还有一些个人收藏的视频:

    原创不易,如果觉得写得好,扫码关注一下点个赞,是我最大的动力。

    关注我,一定会有意想不到的东西等你:

    每天专注分享Android、JAVA干货

    这里写图片描述
    备注:程序圈LT

    展开全文
  • Android开发者开发iOS初入门感想 昨天VMware里装了黑苹果,装上xcode新建了一个HelloWorld。第一个iOS程序算是跑起来了。由于做过Android底层、Android应用程序甚至包括微信小程序。来类比总结一下。由于今天才接触...

    Android开发者开发iOS初入门感想

    昨天VMware里装了黑苹果,装上xcode新建了一个HelloWorld。第一个iOS程序算是跑起来了。由于做过Android底层、Android应用程序甚至包括微信小程序。来类比总结一下。由于今天才接触iOS开发,就直接接触swift了越过了Object-C。也好,前者已经出了4年了,相对也比较稳定了。

    swift语言

    简单看了一下swift,据说几个小时就能熟悉,我看起来差不多。定义变量很像js,常用let和var。比js高级的是可以指定数据类型。

    xcode

    和Android Studio相比,我个人觉得差不多。虚拟机比较快。需要登录在能在真机上调试也是比较怪的,这一点不比Android Studio。注册了一个开发者花了688元。

    文章向来写不长,呵呵。

    展开全文
  • 一个 Android 技术专家,至少有 2~3 个专业领域。 英文:Android Developer Skills for 2020 作者:Vasiliy Zukanov,独立 Android 开发及软件顾问,已获翻译授权 译者 | 罗昭成,Android 开发者;责编 | 唐...
  • Android开发者选项里的主要功能详解 第一项:提交错误报告。这个不需多说,提交当前设备状态的信息以邮件形式发送。 第二项:桌面备份密码。在这里可以设置或更改桌面完整备份的密码,据估计是谷歌在线备份的相关...
  • 一、个人开发者公号的读者中大部分应该都知道我有一个小程序 [Github开源社区]。我简单的介绍下这个小程序:这是一个小程序版的 Github 社区,目前功能比较简单,主要包括了查看热门项目、登录 Github、点赞项目和...
  • 开发者选项是Android开发者提供的一个APP验证、调试、优化等各种功能的入口,它可以帮助我们提高调试效率,协助发现一些bug。这个功能的入口在每个Rom上的位置不尽相同,我的小米手机显示位置是在“其他高级设置”...
  • 前期大量的工具类型小程序给了我们对待某些低频应用的第三种选择,后期社交电商小程序(拼多多等)的爆发,答题解题类型的小程序(头脑王者、成语大人等)的流行,都证实了依托于微信关系圈的微信小程序是有看...
  • AbnerAndroid小程序这个就不多说了,是小编自己写的一个服务于Android开发者的一个微信小程序,从小白到大牛,从技术博文到每日资讯,从每日开源项目到每日推荐,Android,Kotlin,反正包罗万物,小编能想到的都在...
  • 蚂蚁开发者工具也就是支付宝小程序开发工具,支付宝小程序已经进入公测阶段,目前公测主要面向的是企业级开发者,蚂蚁开发者工具是支付宝小程序必备的工具! 小程序介绍: 支付宝小程序是手机应用嵌入支付宝...
  • Google为了方便开发者调试Android程序专门开发了开发者选项功能,能够让开发者方便快捷调试Android应用程序。对于一般用户无需关注,所以往往开发者选项在新版本中都会隐藏,需要特殊操作才会展示入口,比如连续点击...
  • 作为一个传统出身的Android开发搬砖工程师,由于工作需要以及历史推进,最近一年的工作都在写小程序。作为习惯于总结经验的我来说,在研究官方文档之余还是觉得应该写写笔记,作为学习记录。所以接下来一段时间都会...
  • 要求发起分享的App与小程序属于同一微信开放平台帐号。 目前仅支持分享小程序类型消息至会话。 若客户端版本低于6.5.6,小程序类型分享将自动转成网页类型分享。开发者必须填写网页链接字段,确保低版本客户端能...
  • IO大会上说把Kotlin作为Android官方语言,虽然以前也听过,但是不了解,这不进来看看,尝试...翻译给Android开发者的kotlin使用kotlin非常适合开发Android应用,集所有Android平台开发语言的优点于一身,而没有介绍任
  •  对于Android用户来说,无论你用的什么品牌的手机,在开发者选项中都能发现“玄学曲线”的开关,之所以称其为玄学曲线,还是因为它被很多网友用于测试一个说不清道不明的东西——流畅度。到底多流畅才叫流畅,多卡...
1 2 3 4 5 ... 20
收藏数 76,661
精华内容 30,664
关键字:

对android开发者 小程序