-
话说安卓MVP框架搭建和优缺点
2018-02-26 16:45:44项目结构图 MVP搭建步骤: 1Javabean实体类 2 View层从页面获取数据 3 Model层的登录的监听接口 4 Model层业务处理接口 5 Model层业务处理的实现类 6 Presenter层关联Model层和View层 7 acvitity中用Presenter实例...项目结构图
GitHub地址:https://github.com/yangtianfu2018/MVPDemo
本例就是简单的登录页面,获取用户名和密码登录,只不过用MVP的架构去实现,所以效果就不展示了MVP搭建步骤:
1Javabean实体类
package com.ytflogin.mvp.bean; import android.os.Parcel; import android.os.Parcelable; import java.io.Serializable; /** * step① * Created by ppg on 2018/2/26. */ public class UserBean implements Serializable{// Parcelable private String name; private String pwd; public UserBean() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } // @Override // public int describeContents() { // return 0; // } // // @Override // public void writeToParcel(Parcel dest, int flags) { // dest.writeString(name); // dest.writeString(pwd); // } }
2 View层从页面获取数据
package com.ytflogin.mvp.view; /** * step② * Created by ytf on 2018/2/26. * 一个页面对应一个view层接口,提供获取数据的方法 * View层的任务就是抽象页面的数据,提取出来写成方法 */ public interface IUserView { // 提供获取用户名和密码信息的数据接口方法 public String getUserName(); public String getPwd(); }
3 Model层的登录的监听接口
package com.ytflogin.mvp.model; /** * step③ * Created by ytf on 2018/2/26. * 处理业务逻辑的监听接口,这里用来判断登陆结果状态 */ public interface IUserLoginListenser { // 用来监听业务逻辑处理的判断,实现接口后可以通过Toast等显示结果 public void onSucess();//登陆成功 public void onError();//用户信息不正确 public void onFail();//登陆失败 }
4 Model层业务处理接口
package com.ytflogin.mvp.model; /** * step④ * Created by ytf on 2018/2/26. * 提供处理数据的接口方法,这里封装一个登陆的方法, */ public interface IUserModel { /** * 提取一个登陆的方法,并传入登陆监听接口,也可以添加别的方法 * @param name 用户名 * @param pwd 用户密码 * @param userLoginListenser 登陆状态监听 */ public void login(String name,String pwd,IUserLoginListenser userLoginListenser); }
5 Model层业务处理的实现类
package com.ytflogin.mvp.model; import android.text.TextUtils; /** * step⑤ 实现登陆接口的方法,处理业务逻辑 * Created by ytf on 2018/2/26. */ public class UserModel implements IUserModel { @Override public void login(String name, String pwd, IUserLoginListenser userLoginListenser) { if(TextUtils.isEmpty(name)||TextUtils.isEmpty(pwd)){ userLoginListenser.onError(); return; } if (name.equals("ytf")&&pwd.equals("123")){ userLoginListenser.onSucess(); }else { userLoginListenser.onFail(); } } }
6 Presenter层关联Model层和View层
package com.ytflogin.mvp.presenter; import com.ytflogin.mvp.model.IUserLoginListenser; import com.ytflogin.mvp.model.IUserModel; import com.ytflogin.mvp.model.UserModel; import com.ytflogin.mvp.view.IUserView; /** * step⑥ * view层中提供数据源,model层提供业务逻辑方法, * presenter就是要把他们关联起来,所以需要model和view的实例 * Created by ytf on 2018/2/26. */ public class IUserPresenter { // 数据源,view的实例: private IUserView iUserView; // 业务逻辑,model实例 private IUserModel iUserModel;//父类的引用 /** * 构造方法,传入view层数据源 * @param iUserView */ public IUserPresenter(IUserView iUserView) { this.iUserView = iUserView; iUserModel=new UserModel();//父类引用指向子类对象,调用登录方法 } /** * 登录的方法,把view层和model层建立关联,实现真正的登录 * @param loginListenser */ public void login(IUserLoginListenser loginListenser){ iUserModel.login(iUserView.getUserName(),iUserView.getPwd(),loginListenser); } }
7 acvitity中用Presenter实例实现数据与模型交互
package com.ytflogin.mvp.activitity; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.Toast; import com.ytflogin.mvp.R; import com.ytflogin.mvp.model.IUserLoginListenser; import com.ytflogin.mvp.presenter.IUserPresenter; import com.ytflogin.mvp.view.IUserView; import butterknife.BindView; public class MainActivity extends AppCompatActivity implements IUserView{//实现view层接口从页面获取数据源 //step ⑦这里使用了butterknife注解方式,省去了findviewbyid的操作 @BindView(R.id.et_name) EditText et_name; @BindView(R.id.et_pwd) EditText et_pwd; @BindView(R.id.btn_login) Button btn_login; private IUserPresenter userPresenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); userPresenter=new IUserPresenter(this); btn_login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { userPresenter.login(loginListenser); } }); } /** * 实例化登录监听接口 */ private IUserLoginListenser loginListenser=new IUserLoginListenser() { @Override public void onSucess() { Toast.makeText(getApplication(),"登录成功!",Toast.LENGTH_SHORT).show(); } @Override public void onError() { Toast.makeText(getApplication(),"信息不全!",Toast.LENGTH_SHORT).show(); } @Override public void onFail() { Toast.makeText(getApplication(),"登录失败!",Toast.LENGTH_SHORT).show(); } }; /** * 以下方法获取页面数据 * @return 用户输入数据 */ @Override public String getUserName() { return et_name.getText().toString(); } @Override public String getPwd() { return et_pwd.getText().toString(); } }
流程图解:
MVP与MVC的区别:
MVC框架:everything is connected with Activity
view: 视图层,对应与xml布局文件
model: 模型层,对应业务逻辑和实体类
controller: 控制层,对应acvitity
缺点:view视图层对应xml布局文件,所做的事情相当有限,布局文件中的事件绑定,数据处理都是在acvitity中进行
造成acvitity既像view又像controller、MVP框架:
view: 视图层,对应acvitity,负责view的绘制和用户交互,View层的任务就是抽象页面的数据,提取出来写成方法(接口中的方法),就是获取数据
model: 依然是业务逻辑和实体类,提供处理数据的方法,也是接口,还有实现接口的类
presenter: 负责完成view和model之间的交互
特点:代码结构更清晰,减少了acvitity的职责,简化了acvitity中的代码,不再是everything is connected with Acvitity
将复杂的逻辑代码提取到了Presenter类中执行,让model和view完全解耦,耦合度更低区别:①MVC中是允许model和view进行交互的,而MVP中是不允许的,model和view都是通过Presenter这个类进行数据交互
②presenter和view的交互是通过接口完成的
③在MVP中视图的渲染放在了Presenter中,使得view和presenter交互会比较频繁,如果二者联系比较紧密,那么当view中数据改变时,presenter有可能也要做相应改变。
-
Unity 安卓启动图片(splash image)前黑屏解决方法
2017-11-22 08:05:53产生原因是Unity Activity在显示启动图片前会做其他处理,不是马上显示,所以会有黑屏延迟,在网上找了两种解决方法,亲测之后发现各有优缺点: 1.用另一个Activity作为启动 可以做到完全没有黑屏延迟,但是启动...产生原因是Unity Activity在显示启动图片前会做其他处理,不是马上显示,所以会有黑屏延迟,在网上找了两种解决方法,亲测之后发现各有优缺点:
1.用另一个Activity作为启动
可以做到完全没有黑屏延迟,但是启动Activity结束开始Unity Activity还是会有黑屏,两个Activity不能并发,结果就是显示完启动图片会有段时间黑屏
根据activity的生命周期,只要一个activity被其他activity覆盖了就会暂停。
http://www.jianshu.com/p/b63b21e5e3e6
2.重写unity的Activity
开始还是会有段时间黑屏,比unity原生启动图片黑屏时间短,能和unity原生启动图片无缝衔接,没有方法1的缺点。
http://blog.csdn.net/h5q8n2e7/article/details/50484458
http://blog.csdn.net/a1047120490/article/details/53814239
-----2018/1/24 update-----
运用第二种方案可以做到不黑屏,完美启屏,用一个ImageView就可以了
http://blog.csdn.net/u012169685/article/details/52068809
bgView=new ImageView(this); int splash_bg=getResources().getIdentifier("splash", "drawable", getPackageName()); bgView.setBackgroundResource(splash_bg); mUnityPlayer.addView(bgView);
--wolf96 2017/11/22
-
nginx+tomcat前后端分离_前后端分离优缺点分析
2020-12-23 01:37:35一、先用一张图来解释前后端分离已经成为互联网项目开发的业界标准使用方式,通过nginx+tomcat的方式(也可以中间加一个node.js)有效的进行解耦,并且前后端分离会为以后的大型分布式架构,弹性计算架构,微服务架构...一、先用一张图来解释
前后端分离已经成为互联网项目开发的业界标准使用方式,通过nginx+tomcat的方式(也可以中间加一个node.js)有效的进行解耦,并且前后端分离会为以后的大型分布式架构,弹性计算架构,微服务架构,多端化服务(多种客户端:例如:浏览器,车载终端,安卓,IOS等等)打下坚实的基础。这个步骤是系统架构从猿进化成人的必经之路。核心思想是前端html页面通过ajax调用后端的restuful api接口并使用json数据进行交互。在互联网架构中,名词解释:web服务器:一般指像nginx,apache这类的服务器,他们一般只能解析静态资源。应用服务器:一般指像tomcat,jetty,resin这类的服务器可以解析动态资源也可以解析静态资源,但解析静态资源的能力没有web服务器好。一般都是只有web服务器才能被外网访问,应用服务器只能内网访问。
二、为什么要前后端分离(优点)
1. 全端适应
PC、APP、PAD等。
2. SPA开发模式开始流行
SPA即Single Page Web Application,俗称单页应用。
3. 前后端开发职责不清
比如JSP、PHP页面,到底是由前端写还是后端写 (所有的模板语言会遇到这样的问题)。
4. 开发效率问题,前后端互相等待
要把html转成template等,效率比较低。
5. 前端一直配合着后端,能力受限
很多交互逻辑要在template里面由后端实现,前端只负责提供静态html,对前端工程师的能力提高不利。
6. 后台开发语言和模板高度耦合,导致开发语言依赖严重
比如后端是Java写的,后期要换成Python,可是模板中嵌入了很多Java语法,等于要重写整个template。
三、前后端分离缺点
1. 前端学习门槛增加、前端工作量加大
前端需要实现一部分的交互逻辑。
2. 数据依赖导致文档重要性增加
接口文档需要很详细,且要及时更新。(一个段子,程序员最痛恨两件事:1.别人的代码没写文档,2.写文档)
3. SEO难度加大
前端渲染的页面不利于搜索引擎爬虫爬取,但有办法解决的,即SSR策略。
四、综上
1. 一种趋势
前后端分离有一些缺点,但都是可以想办法解决的,总的来说优点大于缺点,而且也是一种趋势。
2. 不过在一些场合其实也没有必要前后端分离
比如写个人网站、内部小运维系统等。这些一般情况下都是一个人完成的,如果前后端分离写,就有frontend和backend两套代码要写,打开两个IDE,颇有左右手互搏的感觉。
当然如果为了练习和学习,写个这样的博客系统也是不错的。
五、补充知识点 - restful api
restful api目前是前后端分离最佳实现
restful api是一种规范,作为开发时的标准
轻量,直接通过http。不需要额外的协议,post/get/put/delete操作
面向资源,一目了然,具有自解释性。比如看请求头delete就知道是删除动作。
数据描述简单,一般通过json或者xml做数据通信
-
安卓获取当前地理位置(集成高德地图)
2019-08-14 16:01:55高德地图定位优缺点: 优点: 自带地址解析,对比百度地图,不含额外的so库 缺点: 需要引入高德的sdk库 集成方法 修改build.gradle文件 implementation 'com.amap.api:location:latest.integration' implementation ...高德地图定位优缺点:
- 优点:
自带地址解析,对比百度地图,不含额外的so库 - 缺点:
需要引入高德的sdk库
集成方法
- 修改build.gradle文件
implementation 'com.amap.api:location:latest.integration' implementation 'com.afollestad:assent:2.3.1'
- 修改manifest文件
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.cxyzy.demo"> <!--用于进行网络定位--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!--用于访问GPS定位--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!--用于获取运营商信息,用于支持提供运营商信息相关的接口--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!--用于访问wifi网络信息,wifi信息会用于进行网络定位--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!--用于获取wifi的获取权限,wifi信息会用来进行网络定位--> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <!--用于访问网络,网络定位需要上网--> <uses-permission android:name="android.permission.INTERNET" /> <!--用于申请调用A-GPS模块--> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> <application android:allowBackup="false" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" tools:ignore="GoogleAppIndexingWarning"> <meta-data android:name="com.amap.api.v2.apikey" android:value="f79c5a4588621faaa90df09b736cae53" /> <!-- 定位需要的服务 --> <service android:name="com.amap.api.location.APSService" /> </application> </manifest>
- 调用
class MainActivity : AppCompatActivity() { private lateinit var mLocationClient: AMapLocationClient private var mLocationOption = AMapLocationClientOption() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) initMap() locateBtn.setOnClickListener { locate() } } private fun initMap() { mLocationClient = AMapLocationClient(applicationContext) mLocationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy mLocationOption.isOnceLocation = true //获取最近3s内精度最高的一次定位结果: //设置setOnceLocationLatest(boolean b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。如果设置其为true,setOnceLocation(boolean b)接口也会被设置为true,反之不会,默认为false。 mLocationOption.isOnceLocationLatest = true //设置是否返回地址信息(默认返回地址信息) mLocationOption.isNeedAddress = true //关闭缓存机制 mLocationOption.isLocationCacheEnable = false //声明定位回调监听器 val locationListener = AMapLocationListener { loc -> progressBar.visibility = GONE if (null != loc) { //解析定位结果 val result = Utils.getLocationStr(loc) locationTv.text = result } else { locationTv.text = getString(R.string.locate_failed) } } //设置定位回调监听 mLocationClient.setLocationListener(locationListener) } private fun locate() { runWithPermissions(Permission.ACCESS_FINE_LOCATION) { if (isLocationProviderEnabled(this@MainActivity)) { locationTv.text = "" progressBar.visibility = VISIBLE //给定位客户端对象设置定位参数 mLocationClient.setLocationOption(mLocationOption); //启动定位 mLocationClient.startLocation() } else { Utils.showAlert("本应用需要获取地理位置,请打开获取位置的开关", this) } } } }
object Utils { /** * 根据定位结果返回定位信息的字符串 */ fun getLocationStr(location: AMapLocation): String? { val sb = StringBuffer() //errCode等于0代表定位成功,其他的为定位失败,具体的可以参照官网定位错误码说明 if (location.errorCode == 0) { sb.append("定位成功" + "\n") sb.append("定位类型: " + location.locationType + "\n") sb.append("经 度 : " + location.longitude + "\n") sb.append("纬 度 : " + location.latitude + "\n") sb.append("精 度 : " + location.accuracy + "米" + "\n") sb.append("提供者 : " + location.provider + "\n") sb.append("速 度 : " + location.speed + "米/秒" + "\n") sb.append("角 度 : " + location.bearing + "\n") // 获取当前提供定位服务的卫星个数 sb.append("星 数 : " + location.satellites + "\n") sb.append("国 家 : " + location.country + "\n") sb.append("省 : " + location.province + "\n") sb.append("市 : " + location.city + "\n") sb.append("城市编码 : " + location.cityCode + "\n") sb.append("区 : " + location.district + "\n") sb.append("区域 码 : " + location.adCode + "\n") sb.append("地 址 : " + location.address + "\n") sb.append("兴趣点 : " + location.poiName + "\n") //定位完成的时间 sb.append("定位时间: " + formatUTC(location.time, "yyyy-MM-dd HH:mm:ss") + "\n") } else { //定位失败 sb.append("定位失败" + "\n") sb.append("错误码:" + location.errorCode + "\n") sb.append("错误信息:" + location.errorInfo + "\n") sb.append("错误描述:" + location.locationDetail + "\n") } //定位之后的回调时间 sb.append("回调时间: " + formatUTC(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss") + "\n") return sb.toString() } private fun formatUTC(l: Long, strPattern: String): String { val sdf = SimpleDateFormat(strPattern, Locale.CHINA) return sdf.format(l) } /** * 判断是否开启了GPS或网络定位开关 * * @return */ fun isLocationProviderEnabled(context: Context): Boolean { var result = false val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) || locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { result = true } return result } fun showAlert(message: String, context: Context) { val alertDialog = AlertDialog.Builder(context).setMessage(message).setCancelable(false) .setPositiveButton(android.R.string.ok) { dialog, _ -> dialog.dismiss() } .setNegativeButton(android.R.string.cancel) { dialog, _ -> dialog.dismiss() } .create() alertDialog.show() } }
完整源代码
https://gitee.com/cxyzy1/geolocationDemo/tree/master/amapDemo
- 优点:
-
安卓开发中常用的一些问题
2018-03-28 16:49:56说出它们的优缺点和各自使用场景?(解答:比如RN,weex,H5,小程序,WPA等。做android的了解一些前端js等还是很有好处的);4,屏幕适配的处理技巧都有哪些?5,服务器只提供数据接收接口,在多线程或多进程条件下,... -
安卓APK瘦身
2020-01-22 06:35:24各种图片的优缺点 webP转换工具 谷歌官方转换工具 或者 Android Studio 选中图片 --> 右键 --> converts to webP PNG 压缩 JPG压缩 其他优化方式 瘦身方式之资源压缩 瘦身方式之其他优化 冗余代码优化 ... -
windows聚焦壁纸不更新_我自己用的壁纸 app, 安卓、ios、windows、mac
2021-01-01 07:41:01搜罗君,每日优质搜罗咱们新来的伙伴不少,昨天有人留言想让我推荐些壁纸,“授人以鱼不如授人以渔”今天就说下各个...要说缺点的话,那就因为手工挑选的原因,更新太慢,软件每周才上新一次图片。2.火萤安卓、ios... -
2019安卓面试题整理
2019-11-28 14:36:54webp的优缺点 什么是矢量图,特点是什么 矢量图对应的另一种图片类型是什么,位图的特点是什么 位图和矢量图的比较 假设xxhdpi目录下有一个2M的图片,那么加载到内存的时候它占用的空间是多大 如果把一个2M的图片放... -
安卓项目架构与技术选型
2016-08-19 11:24:10技术选型要充分了解每种技术的优缺点,最终由项目需求来决定。要了解每个框架的底层实现原理,这些原理决定了框架的优缺点。 APP的框架:网络请求框架、app的大致架构(分包、BaseActivity的封装、工具类)、图片加载... -
2021年安卓开发者跳槽指南,关于Android程序员最近的状况,面试必问
2021-02-04 15:25:13程序员与别的专业有所不同,其他专业...说出它们的优缺点和各自使用场景?(解答:比如:RN,weex,4.H5,小程序,WPA等。做Android的了解一些前端js等还是很有好处的); 5.屏幕适配的处理技巧都有哪些? 6.服务器只提供. -
使用安卓模拟器和GPA截帧分析手游
2018-02-04 13:37:42 刚看到了篇文章,讲解怎么使用GPA和安卓模拟器截帧分析图形渲染的文章《用GPA对android应用绘制分析-GAD腾讯游戏开发者平台》:http://gad.qq.com/article/detail/39208。...优缺点 优点: 1、可以使用 -
安卓面试题系列-7
2015-04-26 21:07:081,双缓冲技术原理以及优缺点: 创建一幅后台图像,将每一帧画入图像,然后调用drawImage()方法将整个后台图像一次画到屏幕上去。 优点:双缓冲技术的优点在于大部分绘制是离屏的。 将离屏图像一次绘至... -
安卓中如何使用iconfont字体图标
2017-03-01 16:44:35先来说一下字体图标的优缺点吧~ 优点: 1. 可以高度自定义图标的样式(包括大小和颜色),对于个人开发者尤其适用 2. 可以减少项目和安装包的大小(特别你的项目中有很多图片icon时,效果将是... -
移动端 验证码/密码 输入框实现--安卓/ios适用
2019-07-05 20:32:28先贴图,需要实现的效果是这样的。 实现思路有两个: 1、用6个input,输入一个数字后将focus给下一个输入框。...2、用一个input和6个span,input隐藏...两种方案遇到的坑,以及优缺点,如下: 方案一:6个inp... -
QT PC 使用QLabel实现circle图片显示和图片旋转动画的功能
2020-10-14 15:56:18文章目录一、实现图片circle显示二、旋转动画功能1,一种是通过设置定时器不停地更新2,第二种方法是使用属性动画QPropertyAnimation3,结合上面两种方法的优缺点,自己总结了第三种方法 一、实现图片circle显示 ... -
Universal-Image-Loader图片加载框架
2017-09-13 16:23:27今天我们就来分析一下安卓中几大主流的图片加载框架的优缺点。Universal-Image-Loader我们先来回顾一下这个图片加载框架,主要是要进行两个配置,一个是图片下载前的配置,还有一个是图片显示配置,我们 -
网易资深安卓架构师:有了这些中高端面试专题-大厂还会远吗?含爱奇艺,小米,腾讯,阿里
2021-01-26 10:55:45前言 想要成为一名优秀的Android开发,你需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~。 此篇文章是初中高级工程师学习文章,知识体系较为完整。...说出它们的优缺点和各自使用 -
原生APP和混合APP、web APP有什么区别?优略势对比
2020-12-07 19:37:28比如 安卓的java语言,iOS的object-c语言。在应用性能上和交互体验上应该是最好的。 优点: 1、可访问手机所有功能、可实现功能最齐全; 2、运行速度快、性能高,绝佳的用户体验; 3、支持大量图形和动画和重新... -
怎么看电脑系统是win几_做设计图用win系统还是苹果MAC电脑更好
2020-11-16 10:15:04MAC 个人评价有同学问,win系统和苹果电脑哪个更合适做设计,确切的说都有优缺点,在回答你这个问题之前要反问你一下,日常智能手机用的都比较多,你用苹果手机还是安卓系统的手机呢?为什么选择xx手机?在我们... -
工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究
2017-02-28 21:22:191.2.4 Android移动Web项目开发的三种解决方案:Native, Web和Hybrid优缺陷分析 4 1.2.5国内外应用现状 6 1.2.6 研究现状总结 7 1.3研究目标与内容 7 1.3.1多窗口浏览器模式的实现机制 7 1.3.2跨域交互即缓存处理方法... -
Gilde加载圆形图片
2016-11-15 20:38:33加载图片的框架有很多,我们就简单的说几个,及其他们的优缺点。 首先是Fresco,它的优点是其他几个框架没有的,或者说是其他几个框架的短板。 优点: 1.图片存储在安卓系统的匿名共享内存,而不是虚拟机的堆内存... -
Android 面试题
2016-05-14 19:49:37安卓体系结构有哪几层数据存储方式有哪些如何启动和...安卓引入广播机制的用意解析XML文件有哪几种方式,及各自优缺点解析AIDLsleep() wait()有何区别JAVA实现线程的方法有哪些?用什么关键字修饰什么情况会导致for -
ppt讲解塞班操作系统发展史
2015-09-30 15:07:00接下来讲的是塞班系统的优缺点,以及这个系统走向没落的原因.这个PPT制作 大概花了一个星期午休时间,我们查阅了网上和图书馆的资料,还找来以前用过的诺基亚手机研究。我们发 现塞班系统还是有不少优点的,例如... -
SpringBoot进阶(七)整合RocketMQ
2020-10-24 18:20:22RocketMQ是阿里出的一个纯java的消息队列框架,其它的还有Kafka,Rabbitmq等,网上也有很多他们的对比,优缺点一目了然,国内可能RocketMQ使用居多,因为它抗住了全球最大的流量洪峰双十一,而且运行稳定!... -
移动端 line-height 文字不居中问题解决方案
2021-01-10 15:18:03在移动端中使用 line-height=容器高度实现文字垂直居中时,在安卓手机会发现文字偏上的问题。...源码中有优缺点和特殊属性的说明; <!DOCTYPE html> <html lang="en"> <head> ... -
GPS定位以及更新流程
2015-09-08 16:13:013.纯粹网络,比如wifi或者基站定位三者的优缺点这里不说了,这里主要看下gps在安卓里是如何工作的。老规矩直接上以前画的图。。可以下载下来看比较清楚。在systemServer启动的时候初始化了LocationMangerService。 ... -
移动端适配方案 移动端1px问题
2019-08-12 12:16:54方案/优缺点 兼容性 颜色 圆角 总结 0.5px 边框 无法兼容安卓设备、 iOS 8 以下设备 支付 支持 简单,不需要过多代码 使用 border-image 无 修改颜色麻烦,需要替换图片 圆角... -
百度手机助手PC版 v6.0.zip
2019-07-12 09:53:44百度手机助手PC版是一款Android手机...百度手机助手优缺点对比: 优点 基本上支持市面上所有的Android设备 支持视频格式转换 分辨率随意调整 缺点 文件管理不方便使用 不能关联APK文件 安装APK不能选定安装路径 -
ContentProvider和BroadcastReceiver
2017-09-06 22:17:27ContentProvider一、概念特点 ContentProvider是四大组件之一,它并不能存储数据,只能为数据的存储或者添加等操作提供一个统一的接口,它可以供多个应用程序...二、优缺点优点: 数据访问统一接口:不需要关注数据存储 -
Kotlin 采用TextView 加载Html标签(标签中带有网络图片链接)
2018-08-26 09:47:22大家不妨了解一下android原生应用,Web应用,混合应用优缺点分析, Kotlin教程:https://www.runoob.com/kotlin/kotlin-tutorial.html。其中一个功能模块需要加载从网络获取的Html标签展示为商品的详情,功能UI如图...
-
基于流形结构的图像地理信息标注方法
-
程序员必修基础套餐课
-
2015年上半年 信息系统管理工程师 上午试卷 综合知识 软考真题【含答案和答案解析】
-
FTP 文件传输服务
-
leetcode算法第7题
-
电商PC前后端分离项目Spring Boot后台实战第一期
-
e_timer_Timer和TimerTask_20210225
-
LVS + Keepalived 实现 MySQL 负载均衡与高可用
-
需求分析与建模最佳实践
-
2017年下半年 信息系统监理师 上午试卷 综合知识 软考真题【含答案和答案解析】
-
2010年上半年 信息系统监理师 上午试卷 综合知识 软考真题【含答案和答案解析】
-
2009年下半年 信息系统管理工程师 上午试卷 综合知识 软考真题【含答案和答案解析】
-
kafka中kafkaConsumer的poll拉取方法
-
支付宝架构师眼里的高可用与容灾架构演进
-
ASHRAE 2012 IT Equipment Thermal Management and Controls_V1.0.pdf
-
2012年上半年 信息系统管理工程师 上午试卷 综合知识 软考真题【含答案和答案解析】
-
虚幻4引擎基础
-
MMM 集群部署实现 MySQL 高可用和读写分离
-
观察者模式的通用性调用
-
简单增删查改新闻管理系统