Android
文章平均质量分 89
释汐宇辰
这个作者很懒,什么都没留下…
展开
-
浅谈Flutter跨平台调用方式MethodChannel
Flutter是目前非常流行的跨平台方案,由于它的性能接近于原生应用,因而被越来越多的开发者所采用。既然是跨平台方案,那么久必然存在调用系统功能的需求,在Flutter中,Flutter层与native层的互调,是通过MethodChannel来实现的。下面来简单的分析下Android端调用Flutter的过程。MethodChannel channel = new MethodChannel(messenger, CHANNEL_NAME , StandardMethodCodec.INSTANCE原创 2020-10-21 17:23:31 · 1557 阅读 · 0 评论 -
Flutter 画面渲染的全面解析
本篇将通过不一样的角度来介绍 Flutter Framework 的整体渲染原理,深入剖析 Flutter 中构成 Layer 后的绘制流程,让开发者对 Flutter 的渲染原理和实现逻辑有更清晰的认知。Layer 相关的回顾先回顾下,我们知道在 Flutter 中的控件会经历Widget->Element->RenderObject->Layer这样的变化过程,而其中Layer的组成由RenderObject中的isRepaintBoundary标志...转载 2020-08-13 13:59:37 · 1719 阅读 · 0 评论 -
Android的消息机制概述
提到消息机制应该都不陌生,在日常开发过程中不可避免的会涉及到这方面的内容。从开发的角度来说,Handler是Android消息机制的上层接口,这使得只需要和Handler交互即可,通过Handler可以将一个任务切换到Handler所在线程中去执行。Handler最常用的场景就是更新UI。Handler运行的需要底层的MessageQueue和Looper的支撑。MessageQueue是消息队列,其内部存储了一组消息,以队列的形式对外提供插入和删除的工作。虽然是消息队列,但是它的内存并不是真正的队列,原创 2020-07-17 11:06:40 · 158 阅读 · 0 评论 -
Android中的线程池
在开发过程中经常会用到线程池,那么线程池有什么好吃呢?总结为一下三点:重用线程池中的线程,避免因为线程池的创建和销毁所带来的性能开销。 能有效控制线程池的最大并发数,避免大量的线程之间因相互抢占系统资源而导致的阻塞现象。 能够对线程进行简单的管理,并提供定时执行以及指定间隔循环执行等功能。Android中的线程池概念来源于java中的Executor,Executor是一个接口,在android中的具体实现是ThreadPoolExecutor,它提供了一系列参数来配置线程池,通过不同的参数可以创原创 2020-07-16 14:30:58 · 224 阅读 · 1 评论 -
IntentService详解
IntentService是一种特殊的Service,它继承了Service并且它是一个抽象类,因此必须创建它的子类才能使用IntentService。IntentService可用于执行后台耗时任务,当任务执行后它会自动停止,同时由于IntentService是服务的原因,这导致它的优先级比单纯的线程要高很多,所以IntentService比较适合执行一些高优先级的后台任务,因为它优先级高不容易被系统杀死。在实现上,IntentService封装了Handler和HandlerThread,这一点可用从o原创 2020-07-16 10:09:53 · 343 阅读 · 0 评论 -
HandlerThread详解
在Android中实现多线程的方式有很多种,常用的有AsyncTask、HandlerThread和IntentService。AsyncTask在上篇文章中已经介绍过,本篇主要分析HandlerThread的实现原理。HandlerThread本身继承了Thread,它的实现要也很简单,就是在run方法中通过Looper.prepare()来创建消息队列,并通过Looper.loop()来开启消息循环,这样在实际的使用过程中就允许在HandlerThread中创建Handler。@Override原创 2020-07-15 22:15:49 · 415 阅读 · 0 评论 -
AsyncTask详解
在Android中有多种实现多线程的方式,比如AsyncTask、HandlerThread、IntentService等,其实从本质上讲,它们都是对传统线程Thread的封装。AsyncTask是一种轻量级的异步任务类,它可以在线程池中执行后台任务,然后把执行的进度和结果传递给主线程并在主线程中更新UI。从实现上讲,AsyncTask封装了Thread和Handler,通过AsyncTask可以更加方便地执行后台任务以及在主线程中访问UI,但是AsyncTask并不适合进行特别耗时的后台任务,对特别耗时的原创 2020-07-15 17:58:34 · 1716 阅读 · 0 评论 -
Java线程中sleep()、wait()和notify()、suspend()和resume()、yield()、join()、interupt()的用法和区别
从操作系统的角度讲,os会维护一个ready queue(就绪的线程对列)。并在某一时刻CPU只为ready queue中位于队列头部的线程服务。但是当前正在被服务的线程可能觉得cpu的服务质量不够好,于是提前退出,这就是yield。或者当前被服务的线程需要睡一会,醒来后继续被服务,这就是sleep。线程退出最好自己实现,在运行状态中一直校验一个状态,如果这个状态为真,就一直运行,如果外界改变了这个状态变量,那么线程就停止运行。sleep使当前线程进入停滞状态,所以执行sleep的线程在指定的时间内肯定不会转载 2020-07-15 15:05:11 · 494 阅读 · 0 评论 -
Activity/View状态保存和恢复 onSaveInstanceState()和onRestoreInstanceState()
Activity/View onSaveInstanceState和onRestoreInstanceState触发的时机/必要条件1:先看Application Fundamentals上的一段话:Android calls onSaveInstanceState() before the activity becomes vulnerable to being destroyed by the system, but does not bother calling it when the i..转载 2020-06-03 17:54:57 · 349 阅读 · 0 评论 -
Activity生命周期
回顾一下Activity的生命周期执行流程,先上个基本流程图上图展现的是一个Activity正常的生命周期和异常情况下的生命周期(比如Configuration变化,系统回收导致的activity销毁等)。除此之外,需要注意两个Activity切换过程中,两个Activity生命周期的执行顺序。如上图所示,创建两个Activity,分别是ActivityFirst、ActivityLifeCycle. 那么ActivityLifeCycle跳转到ActivityFirst,两个Acti.原创 2020-06-03 16:39:44 · 205 阅读 · 0 评论 -
在模拟器上运行flutter app抛出Could not update files on device: HttpException异常
在mumu模拟器上运行flutter app,启动的时候闪退,日志如下:I/OpenGLRenderer( 9665): Initialized EGL, version 1.4D/ ( 9665): HostConnection::get() New Host Connection established 0xa0642dc0, tid 9708D/ ( 96...原创 2019-12-07 17:30:26 · 4047 阅读 · 1 评论 -
android 设置dialog 宽度为屏幕宽度
android 设置dialog 宽度为屏幕宽度 Window win = dialog.getWindow(); win.getDecorView().setPadding(0, 0, 0, 0); WindowManager.LayoutParams lp = win.getAttributes(); lp.width = WindowManager.LayoutParams原创 2017-01-13 15:20:38 · 2423 阅读 · 0 评论 -
天气预报api
天气预报API转自:http://www.bubuko.com/infodetail-469483.html想做天气APP,数据只能从别的地方接入了,以前Google的API不错,不过人家关了都不带告诉你,关了就关了,既不事先通知,事后也不发表声明!雅虎的以前还可以,现在的数据原来越少,越来越没用,所以,只能依靠天朝。本文章只供测试,如果有商业应用,请申请正规的API接口,因使用接口引起的商业转载 2016-11-15 09:27:07 · 801 阅读 · 0 评论 -
在onCreate中获取控件大小的两种方式
在android开发中经常需要在onCreate中获取控件大小,如果在onCreate中直接用getHeight() 或者getWidth()方法获取,得到的值是0.android提供了几种方式,下文就介绍两种。1.ViewTreeObser2.View.post什么是ViewTreeObser一、结构public final class ViewTre原创 2016-11-14 15:19:50 · 965 阅读 · 0 评论 -
诡异的NoClassDefFoundError错误——也可能是65536引起的
一 场景症状一本来好好的App,在引入了某个第三方库之后,忽然就开始报错了:Caused by: java.lang.ClassNotFoundException: Didn’t find class “com.yourapp.XXX”ClassNotFoundException——这是个很常见的错误啊,加载某些类的时候没找到嘛!然而这次的诡异之处在于,转载 2016-11-14 14:46:27 · 440 阅读 · 0 评论 -
recyclerView学习笔记
在使用recyclerView结合StaggeredGridLayoutManager实现瀑布流时遇到item间隔不一致的问题。我的问题出现在onCreateViewHolder中,在创建ViewHolder时,使用的inflate方法造成的。inflate方法有两种形式,一个是两个参数/** * Inflate a new view hierarchy from the spe原创 2016-11-16 18:15:53 · 354 阅读 · 0 评论 -
Android sqlitedatabase应该注意的地方
下面两段代码是我今天的成果。。。。public void saveOrUpdate(List list) { if (list != null && list.size() > 0) { helper.beginTransaction(); try { for (int i = 0; i < list.size(); i++) {原创 2016-09-23 19:53:44 · 376 阅读 · 0 评论 -
table already exists (code 1)
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.isport.isporttracker, PID: 26015原创 2016-09-23 14:46:39 · 6571 阅读 · 0 评论 -
Java中正则表达式的使用以及android邮箱格式判断
上文转载自:Java中正则表达式的使用Java中正则表达式的使用 在Java中,我们为了查找某个给定字符串中是否有需要查找的某个字符或者子字串、或者对字符串进行分割、或者对字符串一些字符进行替换/删除,一般会通过if-else、for 的配合使用来实现这些功能 。如下所示: public class Test{ public static void main(String args[])转载 2016-09-06 15:20:13 · 2868 阅读 · 0 评论 -
android 源码中的单例模式
在Android系统中,我们会经常通过Context获取系统级别的服务,如windoiwsManagerService、ActivityManagerService等,更常用的是一个LayoutInflate的类,这些服务会在合适的时候以单例的形式在注册在系统中,在我们需要的时候就通过Context的getSystemServie获取。我们以LayoutInflate为例来说明,平时我们使用Lay转载 2016-08-25 23:38:21 · 338 阅读 · 0 评论 -
Android Camera 使用小结
本文转自:http://www.cnblogs.com/franksunny/archive/2011/11/17/2252926.htmlhttp://blog.csdn.net/dinglin_87/article/details/7917473Android Camera 使用小结Android手机关于Camera的使用,一是拍照,二是摄像,由于Android提供了强转载 2016-08-13 11:08:07 · 555 阅读 · 0 评论 -
适配android 7的自定义相机的预览及拍照
import android.Manifest;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.content.pm.PackageManager;import android.graphics.Bitmap;import an原创 2017-02-06 18:34:53 · 4980 阅读 · 2 评论 -
BLE 广播数据解析
BLE 设备工作的第一步就是向外广播数据。广播数据中带有设备相关的信息。本文主要说一下 BLE 的广播中的数据的规范以及广播包的解析。广播模式BLE 中有两种角色 Central 和 Peripheral ,也就是中心设备和外围设备。中心设备可以主动连接外围设备,外围设备发送广播或者被中心设备连接。外围通过广播被中心设备发现,广播中带有外围设备自身的相关信息。广播包有两种:转载 2017-03-08 12:13:39 · 5668 阅读 · 0 评论 -
android代码规范
/* * 文件名(可选),如 CodingRuler.java * * 版本信息(可选),如:@version 1.0.0 * * 版权申明(开源代码一般都需要添加),如:Copyright (C) 2010-2013 SINA Corporation. */package com.sina.weibo.sdk.codestyle;/** *转载 2014-10-15 20:41:45 · 624 阅读 · 0 评论 -
获取手机号码
方式一://获取手机号码 TelephonyManager tm = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE); String deviceid = tm.getDeviceId();//获取智能设备唯一编号 String te1 = tm.getLine1Number();//获取...原创 2018-10-15 10:25:47 · 5098 阅读 · 12 评论 -
TextView跑马灯状态监听
最近UI有需求是 文本过长用跑马灯显示,跑完一遍后超出文本状态用 Marquee.END的模式,Android本身没有提供跑马灯状态监听的接口,本打算自定义一个TextView,定时去计算,虽然可以实现,但是效果应该没原生的好,于是决定使用反射的方式去实现,具体代码如下package com.dbn.dialogtest;import android.content.Context;impo...原创 2018-05-14 15:54:50 · 2836 阅读 · 1 评论 -
Android获取本机蓝牙地址
从Android6.0开始,通过BluetoothAdapter.getDefaultAdapter().getAddress()获取的地址是一个固定值02:00:00:00:00:00,部分从低版本升级到6.0的手机也还是可以获取真实的MAC地址的。下面通过反射的方式获取蓝牙地址:public static String getBtAddressByReflection() {原创 2017-12-18 15:11:04 · 11497 阅读 · 3 评论 -
Android SQLite语句记录
CREATE TABLE 'test'('mac' varchar(20) not null,'dateString' varchar(20) not null,'stepnum' integer,'activitytime' integer default(0),primary key ('mac' , 'dateString'));select * from dbstepct wh原创 2017-11-27 11:23:09 · 416 阅读 · 0 评论 -
Android O使用通知遇到的坑
今天在Android 8.0上使用通知的时候,遇到一个问题,只要一发出通知,就弹出系统界面已停止运行的弹框。如下图所示代码如下:NotificationChannel chan1 = new NotificationChannel(PRIMARY_CHANNEL, "cd", NotificationManager.IMPORTANCE_DEFAULT)原创 2017-11-08 15:12:47 · 9860 阅读 · 5 评论 -
Android BLE ERROR CODE
So here is a list of commands that aredocumented by hardware developers, such as Nordic and codes I figured outmyself. List is to be completed.StatusStatus HexDescription转载 2017-09-08 17:18:34 · 26533 阅读 · 0 评论 -
Google Nexus 手机root
https://autoroot.chainfire.eu/原创 2017-09-14 17:31:37 · 407 阅读 · 0 评论 -
浅谈ios为什么比安卓流畅
一、优先级别不同:iOS最先响应屏幕 当我们使用iOS或者是Android手机时,第一步就是滑屏解锁找到相应程序点击进入。而这个时候往往是所有操控开始的第一步骤,iOS系统产品就表现出来了流畅的一面,但Android产品却给人一种卡顿的现象,更别说后续深入玩游戏或者进行其它操控了。这是为什么? 其实这与两个系统的优先级有关,iOS对屏幕反应的优先级是最高的,它的响应顺序依次为Touch--Me转载 2017-08-17 09:37:17 · 1917 阅读 · 0 评论 -
Update your app to take advantage of the larger aspect ratio on new Android flagship devices
To deliver more engaging viewing experiences to their users, many Android OEMs are experimenting with new, super widescreen smartphones. Samsung has just announced a new flagship device, the Samsung翻译 2017-04-01 09:50:26 · 981 阅读 · 0 评论 -
TCP/IP协议三次握手与四次握手流程解析
一、TCP报文格式 TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图:图1 TCP报文格式 上图中有几个字段需要重点介绍下: (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。 (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+转载 2017-03-07 22:56:00 · 238 阅读 · 0 评论 -
单例模式在Android中的应用
单例模式是应用最广的设计模式之一,在应用这种模式的时候,单例对象的类必须保证只有一个实例存在。许多时候,整个系统只需要拥有一个全局对象,这样有利于协调系统的整体行为。如一个应用中,应该只有ImageLoader实例,这个ImageLoader实例中又包含网络请求、缓存系统、线程池等,很耗资源,因此没有理由让他构造多个实例。这种不能自由构造对象的情况就是使用单例模式的场景。在Android系统中存在原创 2017-03-19 16:52:54 · 982 阅读 · 0 评论 -
Android ViewPager Fragment相互嵌套遇到的问题
在项目开发中要在主页中显示不同的页面Fragment,页面Fragment中又嵌套Viewpager,Viewpager添加的是Fragment,然后根据需求增减主页的页面个数时,发生如下异常。解决方法将主页Fragment中嵌套的ViewPager的apdater设置为空05-22 18:04:26.960 3869-3869/com.isport.tracker E/AndroidRuntim原创 2017-05-22 18:10:51 · 1691 阅读 · 0 评论 -
google play商店应用过滤机制,设备应用不兼容的说明及解决办法
Google Play会过滤出那些对用户可见的应用程序,因此用户只能看到和下载那些跟他们的设备兼容的应用程序。通过功能的兼容性是过滤应用程序的方法之一。Google Play通过把以下两项内容进行比较,来判断应用程序跟给定用户设备是否兼容:1. 应用程序需要的功能---指应用程序在它自己的清单的元素中声明的功能;2. 在设备上有效的硬/软件功能---值设备用只读的系统属性所转载 2016-07-29 14:28:46 · 19068 阅读 · 0 评论 -
android 5.0以上状态栏标题栏颜色属性
伴随着Android5.0的发布也更新了support-v7-appcompat 到V21,其中增加了ToolBar、recyclerview、cardview等控件。Android5.0对改变APP样式下了不小的功夫,写法也和以前不一样了,下面先简单介绍一下colorAccent,colorPrimary,colorPrimaryDark……的作用:这样是不是更清晰理解了这些原创 2016-07-01 10:40:24 · 3203 阅读 · 0 评论 -
自定义指示条
直接上代码package com.uwatch.uwpedometer.view;import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.os.Handler;import android.util.Attri原创 2014-12-06 10:20:40 · 538 阅读 · 0 评论 -
禁止viewpager滑动
直接上代码package com.uwatch.uwpedometer.view;import android.content.Context;import android.support.v4.view.ViewPager;import android.util.AttributeSet;import android.view.MotionEvent;原创 2014-12-06 10:22:36 · 475 阅读 · 0 评论