精华内容
下载资源
问答
  • ![图片说明](https://img-ask.csdn.net/upload/202005/10/1589103435_405695.png)
  • 前言app上线,一般公司都希望跟踪app在市场上的使用情况。包括新增用户、活跃用户、渠道信息、错误信息等,还有例如商城类的app,需要跟踪用户最喜欢浏览哪种类型的店铺或商品。这些都可以通过集成友盟统计来轻松...

    前言

    app上线后,一般公司都希望跟踪app在市场上的使用情况。包括新增用户、活跃用户、渠道信息、错误信息等,还有例如商城类的app,需要跟踪用户最喜欢浏览哪种类型的店铺或商品。这些都可以通过集成友盟统计来轻松实现。

    (小提示:由于截的都是大图,在简书显示比较模糊,需要查看清晰图片则鼠标点击图片放大即可)

    集成

    一、获取Appkey

    集成友盟SDK之前,首先需要到友盟官网注册并且添加新应用,获取Appkey(一般公司项目不需要自己申请账号,跟项目经理要即可)。每个应用对应的Appkey是唯一的,如下:



    二、导入SDK

    有两种方法:(本Demo中采用第二种方法)

    方法一:下载SDK,将解压出来的jar包复制到工程libs/目录下。
    下载地址:http://mobile.umeng.com/custom_sdk
    只需要下载Analytics SDK即可,如下:





    方法二:添加SDK在maven中心库的线上依赖
    1、在app的builde.gradle中添加依赖

    /*友盟统计需要的最新版本组件化基础库和统计SDK*/
    compile 'com.umeng.sdk:common:latest.integration'
    compile 'com.umeng.sdk:analytics:latest.integration'
    

    如果无法正常集成,则需要在项目的builde.gradle中添加如下配置:

    allprojects {
    repositories {
            mavenCentral()     
    }
    }
    

    三、在AndroidManifest.xml中添加权限、配置Appkey与渠道(Channel)

    1、添加权限

    <!--友盟统计所需权限-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
    

    2、配置Appkey

        <!--value的值填写你在友盟后台申请的应用Appkey-->
        <meta-data android:value="5ac6e5a2b27b0a7200000082" android:name="UMENG_APPKEY"/>
    

    3、配置渠道
    由于一般会有多个渠道,所以这里的渠道名称不能写死,应该设置成动态的,如下:

       <!--value的值填写渠道名称,例如yingyongbao。这里设置动态渠道名称变量-->
        <meta-data android:value="${UMENG_CHANNEL_VALUE}" android:name="UMENG_CHANNEL"/>
    

    在app的builde.gradle中配置需要的渠道(这里只测试统计宝),对应上面的渠道名称变量。

    /*配置渠道*/
    productFlavors {
        tongjibao{
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "tongjibao"]
        }
    }
    

    完整AndroidManifest.xml如下:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="mychina.com.androidtongji_youmeng">
    <!--友盟统计所需权限-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
    
    <application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
    
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    
        <!--value的值填写你在友盟后台申请的应用Appkey-->
        <meta-data android:value="5ac6e5a2b27b0a7200000082" android:name="UMENG_APPKEY"/>
        <!--value的值填写渠道名称,例如yingyongbao。这里设置动态渠道变量-->
        <meta-data android:value="${UMENG_CHANNEL_VALUE}" android:name="UMENG_CHANNEL"/>
    </application>
    
    </manifest>
    

    完整app的builde.gradle如下:

    apply plugin: 'com.android.application'
    
    android {
    compileSdkVersion 26
    buildToolsVersion "26.0.2"
    defaultConfig {
        applicationId "mychina.com.androidtongji_youmeng"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    /*配置渠道*/
    productFlavors {
        tongjibao {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "tongjibao"]
        }
    }
    }
    
    dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.0.0-alpha1'
    testCompile 'junit:junit:4.12'
    
    /*友盟统计需要的最新版本组件化基础库和统计SDK*/
    compile 'com.umeng.sdk:common:latest.integration'
    compile 'com.umeng.sdk:analytics:latest.integration'
    

    }

    四、添加初始化方法

    在项目工程的自定义application中的onCreate方法中添加以下方法:

    public class MyApplication extends Application {
    
    @Override
    public void onCreate() {
        super.onCreate();
        /**
         * 初始化common库
         * 参数1:上下文,必须的参数,不能为空
         * 参数2:友盟 app key,非必须参数,如果Manifest文件中已配置app key,该参数可以传空,则使用Manifest中配置的app key,否则该参数必须传入
         * 参数3:友盟 channel,非必须参数,如果Manifest文件中已配置channel,该参数可以传空,则使用Manifest中配置的channel,否则该参数必须传入,channel命名请详见channel渠道命名规范
         * 参数4:设备类型,必须参数,传参数为UMConfigure.DEVICE_TYPE_PHONE则表示手机;传参数为UMConfigure.DEVICE_TYPE_BOX则表示盒子;默认为手机
         * 参数5:Push推送业务的secret,需要集成Push功能时必须传入Push的secret,否则传空
         */
        //如果AndroidManifest.xml清单配置中没有设置appkey和channel,则可以在这里设置
        //        UMConfigure.init(this, "58edcfeb310c93091c000be2", "Umeng", UMConfigure.DEVICE_TYPE_PHONE, "1fe6a20054bcef865eeb0991ee84525b");
        UMConfigure.init(this, UMConfigure.DEVICE_TYPE_PHONE,"");
    }
    }
    

    通过上面的步骤,友盟统计就已经集成好了,下面来看看它各种统计的使用。

    使用

    Session统计

    即启动数据的统计(包括新增用户、活跃用户、启动次数、使用时长等基本数据)

    需要在每个Activity的onResume方法中调用 MobclickAgent.onResume(Context),
    onPause方法中调用 MobclickAgent.onPause(Context),如下:

     protected void onResume() {
        super.onResume();
        MobclickAgent.onResume(this);
    }
    
    protected void onPause() {
        super.onPause();
        MobclickAgent.onPause(this);
    }
    

    确保在所有的Activity中都调用 MobclickAgent.onResume() 和onPause()方法。

    如果Activity之间有继承或者控制关系请不要同时在父和子Activity中重复添加nPause和nResume方法,否则会造成重复统计。例如在BaseActivity中添加过,则它的子类就不需要添加了。

    当应用在后台运行超过30秒(默认)再回到前端,将被认为是两个独立的session(启动),例如用户回到home,或进入其他程序,经过一段时间后再返回之前的应用。可通过接口:setSessionContinueMillis(long interval) 来自定义这个间隔(参数单位为毫秒)。

    如果开发者调用kill或者exit之类的方法杀死进程,请务必在此之前调用onKillProcess(Context context)方法,用来保存统计数据。

    安装app启动后。在友盟后台就可以看到统计的数据了。如下:

    新增用户、启动次数、日活等数据:

     

    渠道分析数据:


    image.png

    自定义事件统计

    自定义事件可以实现在应用程序中埋点来统计用户的点击行为。例如我们的应用是商城类的,就需要统计用户是喜欢进入“nike”店铺,还是“new banlance"店铺。自定义事件目前包括"计数事件"和"计算事件",这里主要讲下计数事件。

    1、首先需要在友盟后台添加自定义事件:设置-事件-手工添加-添加事件。如下:




    2、在需要监听自定义事件的地方添加代码,如下模拟点击进入”nike“店铺。
    第二个参数为当前统计的事件ID,需要与友盟后台设置的事件ID一致(即上图的事件ID)。

    MobclickAgent.onEvent(this, "nike");//参数二为当前统计的事件ID
    

    3、运行app,触发该事件后。在友盟后台就可以看到统计的数据了。如下:
    其中消息数量即为事件被触发的次数。


    错误统计

    错误分析是友盟为移动开发者提供的Crash收集和分析工具,帮助开发者监测App在移动设备上的运行状况,及时发现并解决错误,提升App的稳定性。

    Android统计SDK从V4.6版本开始内建错误统计,不需要开发者再手动集成。
    SDK通过Thread.UncaughtExceptionHandler 捕获程序崩溃日志,并在程序下次启动时发送到服务器。 如不需要错误统计功能,可通过此方法关闭

     MobclickAgent.setCatchUncaughtExceptions(false);
    

    如果开发者自己捕获了错误,需要上传到【友盟+】服务器可以调用下面方法:

    public static void reportError(Context context, String error)   
    //或  
    public static void reportError(Context context, Throwable e)
    

    现在我在demo中模拟一次错误,如下:

    /**
     * 模拟错误
     * @param view
     */
    public void createError(View view) {
        int i = 1 / 0;
    }
    

    再到友盟后台查看错误,如下:

    其他统计

    上面三个统计是比较常用的统计,还有很多统计,例如账号统计、页面统计等就不一一列举了。有需求的可以参考友盟统计集成文档


    展开全文
  • 前言 一致性哈希算法的设计目标是为了解决因特网中的热点问题,现在也被广泛应用在分布式系统中。...如果现在需要增加服务器,那么存取图片的服务器的算法就会发生改变,比如增加一台服务器,算法变为hash(a

    前言

    一致性哈希算法的设计目标是为了解决因特网中的热点问题,现在也被广泛应用在分布式系统中。

    比如针对负载均衡问题,对hash值取模的算法扩展性差,当增加或者减少服务器时,映射关系可能会出现问题,采用一致性hash算法,就能较好的解决该问题。

    Hash值取模算法存在的问题

    比如,我们有海量的图片存储在服务器上,假如,现在有4台服务器,我们可以根据图片名称,采用hash算法,决定图片存储在哪台服务器。
    在这里插入图片描述
    如果现在需要增加服务器,那么存取图片的服务器的算法就会发生改变,比如增加一台服务器后,算法变为hash(a.jpg)/5,这时候计算结果不一定还是2,那么图片的位置就要发生改变。同理,减少服务器的话,也会存在相同问题。而且,所有的服务器都会受到影响。

    一致性Hash算法

    一致性Hash算法将哈希值映射的空间表示成一个虚拟圆环,一般可以设置映射值的范围是0----232-1,也就是说,我们得到的hash值要对232取模。该hash环可表示如下:
    在这里插入图片描述
    假如我们有四台服务器,我们可以选择服务器的ip或主机名作为关键字进行哈希,然后取模,每台机器就能在hash环上确定固定位置。如下图所示:
    在这里插入图片描述
    例如有Object A、Object B、Object C、Object D四个数据,经过哈希运算及取模后,在环空间上的位置如下图所示:
    在这里插入图片描述
    从此位置沿环顺时针“行走”,第一台遇到的服务器就是其应该定位到的服务器。也就是说Object A定位到Node A,Object B定位到Node B,Object C定位到Node C,Object D定位到Node D。

    如果Node C这台服务器出现问题宕机,那么Objcet C定位到Node D这台服务器,所以当某台服务器出问题时,只会对顺时针方向的前一台机器产生影响,本例中,只会对Node D有影响。

    同理,如果增加一台服务器Node X,计算后,定位到如下图所示位置:
    在这里插入图片描述
    那么Object C就会定位到Node X,这种情况,只会对顺时针方向的Node C产生影响,不会影响其他服务器。

    一致性Hash的缺点

    当服务器节点比较少的时候会出现一致性hash算法倾斜的问题(大部分数据存在一台服务器上)。在不改变服务器节点个数的前提下,一般解决方案是增加虚拟节点(即对每一个服务器根据一致性hash算法计算多个值,每个计算结果在环上定位一个服务节点),在定位数据时,就可以根据虚拟节点,定位到实际服务器。

    总结

    一致性哈希算法对于节点的增减都只需重定位环空间中的一小部分数据,具有较好的容错性和可扩展性。

    本文来自千锋教育,转载请注明出处。

    展开全文
  • MarkDown常用语法 实例: 标题 源码: # 一级标题 ## 二级标题 … ###### 六级标题 以此类推 共六级标题 粗体 实例: 粗体 源码: ** 粗体 ** 斜体 实例: 斜体 源码: * 斜体 * ...插入图片 实例: 超链

    MarkDown常用语法

    实例:

    标题

    源码:
    # 一级标题
    ## 二级标题

    ###### 六级标题
    以此类推 共六级标题

    粗体

    实例:
    粗体

    源码:
    ** 粗体 **

    斜体

    实例:
    斜体

    源码:
    * 斜体 *

    粗斜体

    实例:
    粗斜体

    源码:
    *** 粗斜体 ***

    删除线

    实例:
    删除线

    源码:
    ~删除线~

    引用

    实例:

    每个牛B人物背后都有段苦逼的岁月,只要想SB的一样坚持,终将牛B!

    源码:
    > 每个牛B人物背后都有段苦逼的岁月,只要想SB的一样坚持,终将牛B!

    插入图片

    实例:
    在这里插入图片描述

    超链接

    实例:
    我的博客

    源码:
    在这里插入图片描述

    列表

    • 有序列表
      实例:
    1. A
    2. B

    源码:
    在这里插入图片描述

    • 无序列表
      实例:
      在这里插入图片描述

    表格

    实例:

    标题1 标题2
    内容1 内容2

    源码:
    在这里插入图片描述

    插入代码

    实例:

    int i = 0;
    

    源码:
    在这里插入图片描述

    学习markdown的tip

    • 简单的语法可以多联系源码输入
    • 复杂的可以使用快捷键或者右键菜单,快捷键效率更高哦
    • 如果忘记可以源码,可以通过快捷键或右键菜单生成,通过源码模式查看
      在这里插入图片描述
      如果对你有用的话,点个赞,收藏下哦!!!如果不用见解,欢迎指教!
    展开全文
  • 白底图的重要性我就不多说了,想必大家都懂,对自然流量和日报活动都有很重要的作用,但很多新手不知道白底图怎么做,现就手把手教您怎么制作一张合格的白底图,此方法也是我自已慢慢琢磨出来的,之前也不懂,还...

    4c575aed21beb6e45844b7977b645681.png

    白底图的重要性我就不多说了,想必大家都懂,对自然流量和日后报活动都有很重要的作用,但很多新手不知道白底图怎么做,现就手把手教您怎么制作一张合格的白底图,此方法也是我自已慢慢琢磨出来的,之前也不懂,还花钱请别人做过,现分享给大家,如有更好的方法,可以探讨和分享,不足之处,恳请指出纠正为谢!
    首先,我们在电脑上要下载一个美图秀秀的软件,打开界面如下:

    a55b2495363162e461334de6eb4874f3.png


    点击打开图片按扭,事先把需要制作的图片保存至桌面,便于操作。

    4c802f5f0e17952d990d06bd386df578.png


    我们以此图为例,红框就是我们需要制作的白底图

    b4ca8e48d422f30d1983d66f858d6beb.png


    点击抠图,选择手动抠图:

    352c83ed3a58d54447cac19295402236.png


    按红色箭头所指鼠标点到该处,按图的形状抠图,以鼠标移动的虚线为准:

    96ab16d9554bd2d34c39ff47ffabdfd5.png


    完整抠图的效果如下图红色方框所示,然后点击完成抠图:

    adbc45ec9537eda60b28f580ea6b18bb.png


    先点击图片尺寸固定按扭,然后输入图片的宽度和高度,白底图要求是480*480,我们按要求输入就可以了:

    d0b8fc5c8d489b44f12d5c881607c6be.png


    背景格式选择透明:

    20f06dd4afbe3d38e01a99e4761e370b.png


    然后按箭头所指任一个角按住鼠标左键不放调整图片大小,图片要求居中,撑满上下边框即可:

    c8ace9612145ccf669fb9284d247c22f.png


    调整好后的图片如下图所示,然后点击完成:

    9c3e2819da9ec390ce5f734febf1a990.png


    这时,我们就可以很直观的看到我们所需的白底图,然后点击保存即可:

    452389cc17f3587a84982864b66d6d66.png


    保存路径可以选择桌面,便于操作,图片格式根据需要选择,一般我们建议为jpg格式的图片:

    2ff2918ceeaf1350a81df26eb081830f.png


    不到五分钟吧,一张480*480的白底图就呈现在我们眼前了,是不是超简单!

    8d690042280a8325e740050b3742c991.png


    如果大家有更好的方法,可以分享哟!

    展开全文
  • 第一次用这个,本来复制上去的图片发表出去尽然没有显示,唉 这回不带图片了,看了上个帖子你大概已经会创建一个基础的插件,这个呢比上一个进步一点,相信学完这个你们应该就会明白大致的流程。 1.还是先创建一个...
  • 通讯录录入界面的美化 数据录入窗口定义模式窗口 定义性别列表字典 将性别定义为静态值列表 ...最后完成运行结果如图: ...录入报表的显示结果查看改变 ...显示个人图片 不显示简历...
  • 本章主要介绍CSS3中与背景和边框相关的一些样式,其中包含与背景相关的属性,比如如何在一个元素背景中使用多个图片文件,如何绘制圆角边框以及如何给边框添加图片。 这章的知识点都是很有意义的,是我们一定会用到...
  • 本章主要介绍CSS3中与背景和边框相关的一些样式,其中包含与背景相关的属性,比如如何在一个元素背景中使用多个图片文件,如何绘制圆角边框以及如何给边框添加图片。 这章的知识点都是很有意义的,是我们一定会用到...
  • 【制作完成效果前后对比】 一、找一张图片放于ps中,保存并命名“头像.psd”(名字随意,自己记住就行) 二、使用区域文字工具绘制出文字区域,填入文字(可以去网上复制长段的文章),调整...、把头像图层...
  • 下图为要处理的表格的一小部分,左边为数据,右边为记录数据的时间,每五分钟记录数据的个数不同。请教各位大神如何用R语言、EXCEL或者其他数据分析软件将表格按时间这一列拆分成时间长度为5分钟的表格?要求能够...
  • 前言 呵呵哒 进展 先说说今天早上的事情,公众号的粉丝一夜之间增加了两...公众号的内容每天花一个小时就能做出来,写了两个爬虫,分钟就能爬取评论生成词云、爬取图片 关联了哔哩哔哩小程序,偶尔在文章中插入 小
  • ![错误代码指向872行]...[错误提示为内存溢出](https://img-ask.csdn.net/upload/201609/13/1473730488_307783.png) 不是一打开就报错,一般不停的打开,大概五分钟后就会报错误
  • 上一次实现了调用摄像头接口,并实现了每间隔五分钟执行一次;用的是while语句加上Thread.sleep(),虽然能实现定时调用的功能,但是sleep会长时间占用内存,浪费资源;后来经朋友提醒,改用了Quartz指针,去实现定时...
  • 全文共1789字,预计学习时长3分钟 图片来源:pexels.com/@rawpixel 软件开发经理的工作不是提供一件产品或某项功能,也不是实现任何指标或增加收入。经理的主要工作是确保他所带领的工程师在他们的职业生涯中...
  • 图片由注册用户"仰望星空"提供,版权声明反馈解决方法1、先停止大量使用热水,10-20分钟后再使用咖啡机。2、将咖啡机开关打开,如:从0到1再到2的顺序(咖啡机不同,开关不一样)。3、查看机器电源指示灯(绿灯)是否....
  • 、对提供的图片用flash处理,在网页的一处出现。 六、一处插入java applet(java applet在文件夹里提供,参数及说明见文件javaapplet.txt)。 七、设定、使用CSS样式(至少一次)。 八、建立外链接连接和E-mail...
  • 本文转自 |五分钟学算法作者 |不该相遇在秋天责编 | 程序员小吴前言本文全长 14237 字,配有 70 张图片和动画,和你一起一步步看懂排序算法的运行过程。预计阅读时间 47 分钟,强烈建议先收藏然后通过电脑端进行阅读...
  • 前言今天本是一个阳光明媚,鸟语花香的日子。于是我决定在逛街中感受春日的阳光~结果晚上七点的时候,蚂蚁金服后端大佬来了电话,要进行一轮的技术面试。...秒钟的沉默,大佬嗯了一声。感觉自...
  • )jhead-st"bak\&i"*jpg 把当前目录下的所有文件的缩略图复制保存到bak目录下并与原文件名同名。 (六)jhead-te01jpg02jpg 单个文件导入,把01jpg的信息导入到02jpg,覆盖原来的。 jhead-te"bak\&i"*jpg 批量...
  • Markdown语法详细

    2020-08-09 21:53:27
    本文较长,可以先看Markdown十五分钟快速入门(typora) 文章目录1.1 基础语法1.1.1 字体1.1.1.1 标题底线的语法:渲染:#的语法:渲染:1.1.2 粗体和斜体粗体的语法:渲染:粗体的语法:渲染:1.1.2 列表...
  • 图片来源:微信视频号@前后10年 ... 图片来源:微信视频号@前后10年 ...第步:通常提示预计还需3分钟,请耐心等待! 图片来源:微信视频号@前后10年 第六步:等处理完成以后,点保存相册即可。 图片来源:
  • 省心电脑 挂机锁.rar

    2020-05-20 16:25:57
    四:设置挂机图片,点击设置图片按钮进入设置图片界面,选择自己喜欢的图片点击确定即可,设置图片后可以设置透明度,建议不要设置全透明。 : 设置密码,本软件的默认密码是123,用户可以根据需要修改密码,此密码是...
  • 先是PPT(五分钟卡点) 英语口语 听译没咋听清楚 what sports do you like best? What is debugging? 专业测试五选三 独异点<Z,*>中*运算表的特点 给一个IP地址范围,求子网掩码 数据库中存储图片用什么...
  • 一条毛巾浸比洗澡水还要热一点的热水,另一条毛巾浸加了冰块的冷水,先把热毛巾放在眼睛上约五分钟,然后再放冷毛巾五分钟。 眼睛体操 中指指向眼窝和鼻梁间,手掌盖脸来回摩擦五分钟。然后脖子各项左右慢慢移动...
  • e每五分钟执行 /5 *每小时执行 0每2小时执行 0 /2每天执行 0 0 *每周执行 0 0 0每月执行 0 0 1每年执行 0 0 1 1 *技术分享图片星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 165
精华内容 66
关键字:

五分钟后图片