A. 怎么优化app store
“柚鸥ASO”在ASO这块就做的蛮不错的,一直专注于应用商店优化,因为专注所以专业;专注应用商店下载量优化、评分优化、关键词排名优化、关键词覆盖、产品权重提升等等整体方案优化服务
柚鸥网络-全球ASO优化服务商专注ASO优化已11年!(效果说话不到效果不收费)
【基础优化】协助客户针对app情况在各大应用商店进行标题,副标题,关键词,描述等优化。
【进阶优化】给app进行下载增量,提升关键词的覆盖数,进行评分优化,增加产品的品牌形象。
【高阶优化】针对核心有效的关键词进行排名优化提升,从而获取最精准的用户。
B. 常见APP推广方式有哪些
1、植入广告模式。
在众多的功能性应用和游戏应用中,植入广告是最基本的模式,广告主通过植入动态广告栏形式进行广告植入,当用户点击广告栏的时候就会进入网站链接,可以了解广告主详情或者是参与活动,这种模式操作简单,只要将广告投放到那些下载量比较大的应用上就能达到良好的传播效果。
2、注册返利模式。
这种推广模式是,广告发布商把符合自己定位的应用发布到应用商店内,用户通过手机应用平台下载应用,然后完成注册,广告发布商将支付一定报酬用来鼓励用户的这种行为。这种营销模式具有很强的实验价值,让用户了解产品,增强产品信心,提升品牌美誉度。
3、销售返利模式。
该模式基本上是基于互联网上购物网站,将购物网站移植到手机上面,用户可以随时随地的浏览网站获取商品信息,进行下单,这种模式相对于手机购物网站的优势是快速便捷,内容丰富,而且这种应用一般具有很多优惠措施。
4、aso优化方式。
就是对于app本身的优化,比如副标题、描述、截图、视频预览、这些设置就是让算法能命中重要的关键词,截图和视频预览就是打开app详情页后的展示,就是让人在没有下载app情况下,提前体验下app的美观。
5、社交平台。
是推广app一个拓展渠道,因为现在很多人都使用社交平台进行交流,不管是什么人群都在使用社交平台,比较让人关注的社交平台是qq和微信,其他社交平台只是作为微信和qq缺点的补充。
C. android 开发之app都可以进行哪些优化
1.在后台取消一些线程中的动作
我们知道App运行过程中所有的操作都默认在主线程(UI线程)中进行的,这样App的响应速度就会受到影响。会导致程序陷入卡顿、死掉甚至会发生系统错误。
为 了加快响应速度,需要把费时的操作(比如网络请求、数据库操作或者复杂的计算)从主线程移动到一个单独的线程中。最高效的方式就是在类这一级完成 这项操作,可以使用AsyncTask或者IntentService来创建后台操作。如果选择使用IntentService,它会在需要的时候启动起 来,然后通过一个工作线程来处理请求(Intent)。
使用IntentService时需要注意以下几点限制:
这个类不要给UI传递信息,如果要向用户展示处理结果信息请用Activity;
每次只能处理一个请求;
每一个处理请求过程都不能中断;
2.保持响应不发生ANR
从UI线程中移除费时操作这个方式还可以防止用户操作出现系统不响应(ANR)对话框。需要做的就是继承AsyncTask来创建一个后台工作线程,并实现doInBackground()方法。
还有一种方式就是自己创建一个Thread类或者HandlerThread类。需要注意这样也会使App变慢,因为默认的线程优先级和主线程的优先级是一样的,除非你明确设定线程的优先级。
3.在线程中初始化查询操作
当查询操作正在后台处理时,展示数据也不是即时的,但是你可以使用CursorLoader对象来加快速度,这个操作可以使Activity和用户之间的互动不受影响。
使用这个对象后,你的App会为ContentProvider初始化一个独立的后台线程进行查询,当查询结束后就会给调用查询的Activity返回结果。
4.其它需要注意的方面
使用StrictMode来检查UI线程中可能潜在的费时操作;
使用一些特殊的工具如Safe.ijiami、Systrace或者Traceview来寻找在你的应用中的瓶颈;
用进度条向用户展示操作进度;
如果初始化操作很费时,请展示一个欢迎界面。
优化设备的电池寿命
如果应用很费电,请不要责怪用户卸载了你的应用。对于电池使用来说,主要费电情况如下:
更新数据时经常唤醒程序;
用EDGE或者3G来传递数据;
文本数据转换,进行非JIT正则表达式操作。
5.优化网络
如果没有网络连接,请让你的应用跳过网络操作;只在有网络连接并且无漫游的情况下更新数据;
选择兼容的数据格式,把含有文本数据和二进制数据的请求全部转化成二进制数据格式请求;
使用高效的转换工具,多考虑使用流式转换工具,少用树形的转换工具;
为了更快的用户体验,请减少重复访问服务器的操作;
如果可以的话,请使用framework的GZIP库来压缩文本数据以高效使用CPU资源。
6.优化应用在前端的工作
如果考虑使用wakelocks,尽量设置为最小的级别;
为了防止潜在的bug导致的电量消耗,请明确指定超时时间;
启用 android:keepScreenOn属性;
除了系统的GC操作,多考虑手动回收Java对象,比如XmlPullParserFactory和BitmapFactory。还有正则表达式的Matcher.reset(newString)操作、StringBuilder.setLength(0)操作;
要注意同步的问题,尽管在主线程中是安全的;
在Listview中要多采用重复利用策略;
如果允许的话多使用粗略的网络定位而不用GPS,对比一下GPS需要1mAh(25s * 140 mA),而一般网络只用0.1mAh(2s * 180mA);
确保注销GPS的位置更新操作,因为这个更新操作在onPause()中也是会继续的。当所有的应用都注销了这个操作,用户可以在系统设置中重新启用GPS而不浪费电量;
请考虑在大量数理运算中使用低精度变量并在用DisplayMetrics进行DPI任务时缓存变量值;
7.优化工作在前台的应用
请确保service生命周期都是短暂的,因为每个进程都需要2MB的内存,而在前台程序需要内存时也会重新启动;
保持内存的使用量不要太大;
如果要应用每30分钟更新一次,请在设备处于唤醒状态下进行;
Service在pull或者sleep状态都是不好的,这就是为什么在服务结束时要使用AlarmManager或者配置属性stopSelf()的原因。
8.其它注意事项
在进行整体更新之前检查电池的状态和网络状态,等待最好的状态在进行大幅度装换操作;
让用户看到用电情况,比如更新周期,后台操作的时候;
实现低内存占用UI
9.找到布局显示问题
当 我们为布局单独创建UI的时候,就是在创建滥用内存的App,它在UI中会出现可恶的延时。要实现一个流畅的、低内存占用的UI,第一步就是搜索 你的应用找出潜在的瓶颈布局。使用Safe.ijiami和Android SDK/tools/中自带的Hierarchy Viewer Tool工具。
还有一个很好的工具就是Lint,它会扫描应用的源码去寻找可能存在的bug,并为控件结果进行优化。
10.解决问题
如果布局显示结果发现了问题,你可以考虑简化布局结构。可以把LinearLayout类型转化成RelativeLayout类型,降低布局的层级结构
D. APP 优化 - 概述
不是我蛋疼,有的朋友可能真的大部分 APP 优化点都说不上来,当然也是 app 里面可以优化的东西多造成的,我也不可能都知道,写我自己的认识吧
这个可是大家都得会的了,每个 andorid 都需要的,app 启动优化的思路就是减少 application 和 launch activity 的创建耗时。但是往往这里都是我们进行初始化的地方,所以我们的优化思路如下:
详细请看我们文章:
APK 瘦身的思路不多,就是减少 png 适配文件,压缩 png ,使用 webp,svg 代替 png ,app 能自己画的尽量自己画,比如 shape,layer-list,drawable,svg
然后是只适配 ARM 架构 CPU,动态下发 so,jar,aar文件,使用 lint 去除无用资源,打包时不打没使用的文件进去
具体请看我的文章:
E. APP启动性能优化
一、浅谈APP启动性能优化原因
1、引起性能问题的原因
随着项目不断的快速迭代,往往会造成App启动卡慢现象,因为可能在App主进程启动阶段或者在主界面启动阶段放了很多初始化其他业务的逻辑,而这些业务落地可能一开始并不需要用到;
2、为什么要做启动速度优化
App启动卡慢会影响一个App的卸载率和使用率;
启动速度快会给人一种轻快的感觉,减少用户等待时间;
如果一个App从点击桌面图标到看到主界面花了10秒,请问你能接受么?忍耐不好的估计直接就卸载了,或者没等打开就直接Home键按出去,然后杀进程了;这样一来App卸载率提升了,使用率下降了。所以对于有大量用户的App来说,这些性能细节是很重要的;
APP启动性能优化工具的选择
作为APP的开发者,我使用的一直都是一款友盟+软件,U-APM 是友盟+推出的App稳定性监控、性能监控和云真机测试平台。通过轻量级的集成接入即可拥有实时、可靠、全面的应用崩溃、ANR、自定义异常等捕获能力,及卡顿、启动分析等性能能力,支持多场景、多通道智能告警监控,帮助开发者高效还原异常、卡顿用户的访问路径和业务现场,缩短故障排查时间。
二、分析怎么做启动优化
1、启动过程简单分析
App从点击桌面图标到我们看到App的主界面整个过程中经过了哪些步骤,哪些地方是我们可以优化的地方;
2、从启动过程找出优化点
App启动过程中我们优化的地方包括主进程启动流程和主界面启动流程,主进程启动就是Application的创建过程,主界面启动就是MainActivity的创建过程;
只需要分别对这两个部分进行优化即可:
Application中attachBaseContext最早被调用,随后是onCreate方法,尽量在这两个方法中不要有耗时操作;
三、启动优化步骤
1、Application中加入异步线程
是把不必要提前做的操作放到异步线程中去做,也就是我们经常做的异步加载;
2、主页面加入异步线程和延迟加载功能
与Application的优化思路一样,也是封装onSyncLoad和onAsyncLoad方法对现有代码进行一个分类,但是这两个方法的调用时机要晚一点,是在主界面首屏绘制完成的时候调用。这个步骤也需要new一个Thead,属于额外的开销,不过这不影响我们整体性能;
3、态加载布局:主布局文件优化
把主界面中不需要第一次就用到的布局全部使用动态加载的方式来处理,使用ViewStub或者直接在使用时动态addView的方式;
4、主布局文件深度优化
Activity在加载布局的时候,会对整个布局文件进行解析,测量(measure),布局(layout)和绘制(draw),所以设计简单合理的布局尤为重要。几个重要的优化如下:
减少布局层级
减少首次加载View的数量
减少过度绘制
5、页面功能的分模块化和懒加载
一个页面上有很多功能模块,最好每个功能模块都单独的分开,模块之间用接口进行数据沟通;
按需加载所需要的功能,不要打开一个页面都加载所有的功能;
加载完所需要的功能,如果是一次性加载不需要保持在内存中,尽快销毁掉,形成良好的习惯。
APP启动性能优化是一条持续之路,通过优化我们可以了解到影响启动性能的因素有哪些,这样我们平时在编码的过程中就会多注意自己的代码性能。开发者可利用友盟+U-APM对APP启动进行监控,另外友盟+U-APM还提供云真机测试能力,助力开发者从研发测试质量验收到线上问题复现排查,保障应用品质,提升测试效率。在云真机测试期间自动采集崩溃信息,提供详尽的崩溃报告协助筛查,真正实现监控测试全流程深度打通。
F. 如何快速优化APP的关键词
选好APP的关键词是我们做ASO优化的基础,关键词选得好,对我们日后的优化工作来说有事半功倍的效果,而选好关键词说难不难,说容易也不容易,下面就从新人的角度来说下如何选好我们的APP的关键词。首先我们需要先找准产品定位,产品属于什么类型,然后确定关键词的范围。然后我们点进每个应用,找到他们应用下排名较高且搜索指数较高的关键词,记到我们的文档里面。如果我们拿不准我们选出的关键词和我们APP是否有关联,可以通过“关键词扩展助手”功能进行查询。我们在搜索框内输入“购物”,然后“ctrl+f”,全局搜索是否有我们选中的关键词,这样我们就可以留下一批搜索热度高、相关性高的关键词。
G. 移动app怎么进行性能优化
App的出现给我们的生活带来了很多便利的地方,拿着手机就可以解决很多生活问题,比如说购物、看新闻、查资料、学习等等,这些都是移动App给我们带来的便捷,所以一款好用的App是非常重要的,它的性能问题影响了用户体验,对移动App进行适当的优化也是非常有必要的。你可以了解下听云APP,它是新一代的移动应用性能管理解决方案,部署在App应用生产环境,可以迅速发现定位App的崩溃、黑屏、卡顿等用户体验问题。采集真实用户移动设备上的应用性能,帮助企业了解真实的用户体验,通过植入探针主动探测移动应用性能,帮助企业及时发现应用性能隐患,及时进行优化、调整,从而提升App质量,改善用户体验。
H. 移动 app 从哪些 方面优化
定了四个方向:
- 响应时间(Response Time)
- 界面卡顿(ANR)
- 耗内存(Memory)
- 内存泄露(Out of memory)
响应时间
这里指的是客户端与服务端交互,拿到数据、解析、再到显示到界面整个过程耗费的时间。
这个部分涉及客户端的优化,也涉及服务端的优化,这里只讨论客户端。
HTTP请求方式
我们的app一般离不开网络,请求接口是最平常的操作了,如何请求,请求什么我们在开发初期就要定好,服务端给我的提供的接口,大致可以通过GET、POST、HEAD、PUT、DELETE这几种请求方式,不同的请求方式有不同应用场景,比如GET请求,应当用来请求返回结果,参数是作为url的一部分;POST请求,用于请求会更改服务端数据或状态;HEAD请求跟GET一样,只是服务器不能在响应里返回消息主体;PUT请求,用于将网页放置正确的地方;DELETE请求用于删除服务器指定文档。
使用优秀的开源Http框架是我们比较好的选择,它的优点是经过市场的验证,很多坑都被填过,缺点也是我们需要去深究它才能对其进行扩展,遇到坑也不一定能填。
如果自己造轮子的话,还需要我们花时间去验证去适应我们的业务需求,但好处是我们可以自己去扩展可把控,不过这很考量开发者的素质。
数据解析
实际开发当中服务端的返回数据格式无非就两种:
- JSON
- XML
这两种格式数据格式各有优劣,从可读性来看,xml略微好一点,不过JSON也有规范的标签,从解析难度和速度来看,大家都比较倾向使用JSON,目前JSON也是主流的数据格式。
在Android中均可以使用优秀的解析库来加快我们的解析速度,XML中有dom4j,JSON有Jackson、Gson,我们通过这些库实现我们更快的完成数据解析,提高我们的开发效率。
数据存储
上一节讲的是数据解析,我们解析完后的数据,可能就需要将数据存储在某个地方,Android的五种存储方式:
- Content Provider(主要用来向其他应用程序共享数据)
- SQLite(存储数据到数据库中)
- File(本地文件保存)
- SharedPreference(主要用来保存简单的配置信息)
- 网络存储(WebService返回的数据或是解析HTTP协议实现网络数据交互)
为了提高应用程序的响应时间,数据缓存是一个比较好的方式,我们可以预处理服务器返回的数据,对数据进行缓存刷新。
优化点:
- 异步请求网络数据
- 预处理服务器返回数据
- 异步进行数据存储操作
- 数据缓存刷新
- Timeout超时重试
- 在主线程中操作UI
界面卡顿
ANR表示”应用程序无响应”,这个是需要我们避免发生的事情,出现这个异常的原因:
- 主线程 (“事件处理线程” / “UI线程”) 在5秒内没有响应输入事件
- BroadcastReceiver在10秒内没有执行完毕
导致ANR的原因有很多,一般情况就是在UI线程做了耗时的操作,例如”网络请求”、数据库操作。
那么如何避免?
- UI线程只做界面刷新,不做任何耗时操作,耗时操作放在子线程来做
- 可以使用Thread+handle或者AsyncTask来进行逻辑处理
耗内存
每部手机的内存有限,我们这里所说的内存指的是手机的RAM,它是Ramdom Access Memory的缩写,我们应用程序的需要随机读写的数据就存在RAM中,Android手机之所以会比较耗内存,这跟Android后台的处理有关,我们知道Android应用是使用Java开发的,运行Java需要有虚拟机,说明每开启一个应用都会创建一个虚拟机,而这是需要内存的,所以我们开的应用越多,后台进程越多,内存都分配出去了,才导致内存消耗的严重。
其实这个问题我们是没得破的,只要内存不够,我们的应用还是会卡。我们开发的应用依赖与系统给我们分配的堆内存,一般上限在16M~48M,但我们可以通过在AndroidManifest设置Application属性largeHeap=“true”来申请更多的堆内存。
通过以下代码获取可用堆内存限制:
mActivityManager = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
mMaxMemory = mActivityManager.getMemoryClass();1212
内存泄露
内存泄露这个问题已经被说烂了,大家都知道有内存泄露这个问题存在,但为什么会发生内存泄露?
这里的内存泄露并不是真正意思上的泄露,而是因为内存不足不能进行GC操作,从而导致占用内存过大,抛出out of memory异常,而被系统Kill掉。
JVM回收机制
是时候讲讲JVM的回收机制了,看下图:
JVM对Java对象分了三个代进行管理,分别为年轻代、年老代、永久代。
年轻代(Young Generation):绝大多数的Java对象会在年轻代被分配,也会在年轻代被回收。
年老代(Old Generation):在年轻代长期存在没有被回收的Java对象会转移到年老代,这个堆空间通常会被比年轻代的堆空间要大。
永久代:存放VM和Java类的元数据,以及interned字符串和类的静态变量。
这里涉及到JVM的相关知识,这里不继续深入探讨。
但我们应该可以知道垃圾回收器的作用:
- 分配内存
- 保证所有正在被引用的对象还存在于内存中
- 回收执行代码已经不再引用的对象所占的内存
对象引用
Java的引用类型可以分为以下几种:
- 强引用(Strong Ref):强可达,去掉强可达,才会被回收。
- 软引用(Soft Ref):内存够用,就保持,内存吃紧,则回收,主要用来做缓存。
- 弱引用(Weak Ref):比Soft Ref弱,即使内存不吃紧也会被回收。
- 虚引用(Phantom Ref):不会在内存保持任何对象。
I. 旅游类app怎么优化,优化技巧
旅游类App想要实现有效推广,可以通过优化联想词的方式,以获取相对精准的用户。这方面,泽思的成功经验较多。以旅游问答类App韩国问我为例,可以做韩国、韩国旅游等核心词的联想词,获取的用户量大且精准。
J. 如何优化app的运行内存占用
一、尽量减少Service的使用:
当你的app需要使用service来处理后台任务的时候,要保证当前的任务完成时,该service也要停止。另外,要注意的是,当停止这个service的时候,不要引起它的泄漏。
当启动一个service之后,系统总会保持这个service处于运行状态。这样,就会占用大量的RAM。所以,app的运行效率就会因此降低。
保留没有用的service最可怕的内存管理错误。所以,一定要牢记,没有必要使用service的时候就不用,用完了一定要记得将它销毁!!!!
二、当界面变为不可见时,要记得释放内存:
当用户跳转到其他界面时,并且当前界面不再可见的时候,要记得释放当前这个界面中的资源。
当用户退出某个界面时,记得在你的activity中实现onTrimMemory()(api4.0及以上)这个回调方法。调用这个方法,系统会收集不需要的内
三、当内存变少时,释放内存:
在你的app运行过程中,当运行该app的设备所剩的RAM变得很少时,系统就会调用onTrimMemory()这个方法,这个方法中有几个参数,表示不同的状态。onTrimMemory()的具体使用,还请大家参加Android的开发文档吧,本人手懒,就不详细介绍啦。
四、检查你所需要使用的内存:
可以通过getMemoryClass()估计一下你的app可用的heap。当你的app所需要的内存超过了这个可用值时,好了内存溢出就出现了。
这里有一个很特殊的方法,可以通过在manifest <application>标签中将largeHeap的属性值设置为true来请求更大的内存,主要注意的是,如果你采用了这种方法,那么当你想要获取可用内存时,就要使用 getLargeMemoryClass()。
不过由于每台机器的RAM是有限的,所以用这个还是小心吧,不需要用的时候还是不用了吧。
五、避免由bitmap引起的内存浪费:
bitmap还是很占内存的啊,当我们使用它的时候一定要小心。有几个需要注意的方法:
1、不要直接使用这样会占用很大的内存,使用BitmapFactory.Options设置inSampleSize,根据手机屏幕大小来设置bitmap的大小, 这样做可以减少对系统资源的要求。
2、缓存图像到内存,采用软引用缓存到内存,而不是在每次使用的时候都从新加载到内存;
3、采用低内存占用量的编码方式,比如Bitmap.Config.ARGB_4444比Bitmap.Config.ARGB_8888更省内存;
4、最后就是最重要的一点,当bitmap使用完之后一定要记得回收!!!
六、使用优化过的数据容器
尽量使用 SparseArray, SparseBooleanArray, LongSparseArray 等经过优化的容器类。通常来说HashMap的效率时比较低下的。
七、小心使用抽象类(方法)
适当的使用抽象类和方法能够使我们的代码更加灵活、易维护,但是这样会增加app的内存占用。所以,那些无关痛痒的东西,还是别抽象了吧。