主线程中定义Handler,子线程发消息,通知Handler完成UI更新,Handler对象必须定义在主线程中,如果是多个类直接互相调用,就不是很方便,需要传递content对象或通过接口调用。另外Handler机制与Activity生命周期不一致的原因,容易导致内存泄漏,不推荐使用。
报错说明 直接在子线程更新UI会报CalledFromWrongThreadException错,错误如下: 12-20 15:39:04.730: E/AndroidRuntime(2763): FATAL EXCEPTION: Timer-0 12-20 15:39:04.730: E/AndroidRuntime(2763): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thre
timer.schedule的第三个参数是间隔多久重复一次,可以不设置,做一次性的任务。
使用背景:项目中需要使用几个机器学习模型,由于加载很缓慢,所以考虑用ProgressDialog来进行提示,预测结束后dialog自动消失。 效果如下:
转载请以链接形式标明出处: 本文出自:103style的博客 记录一下 Android子线程切回主线程 的方法。 view.post(Runnable action): textView.post(() -> { textView.setText("更新textView"); }); activity.runOnUiThread(Runnable action): MainActivity.this.runOnUiThread(() -> { showIllegalClassDia
handler使用步骤 1.在主线程定义了一个Handler private Handler handler = new Handler() 2.使用handler会重写handler里面的handlerMessage方法 public void handlerMessage(Message msg){} 3.拿着我们在主线程创建的handler去子线程发消息 handler.sendMessage(msg); 4.handlerMessage方法就会执行,在这个方法里面去更新ui
技术概述 Retrofit是一个android的网络请求框架,封装于Okhttp,实际上Retrofit是在Okhttp的基础上完成了请求接口的封装。团队项目需要通过网络请求获得用户的数据、菜谱的数据等,需要用到这个技术。Retrofit的一个难点是注解,请求方法、请求头、请求参数等都需要用到注解。
协程,kotlin中一个神奇的组件,由于使用方便任意切换被广大开发者使用,今天就来看看协程:
activity提供的一个轻量级更新ui的方法,在Fragment需要使用的时候要用getActivity.runOnUiThread开启线程
/** * 在主线程中 执行代码 * * @param runnable */ public static void runOnUiThread(Runnable runnable) { // 如果在主线程中运行 直接运行 如果没有在 提交一个handler if (isRunUIThread()) { runnable.run(); } else { execu
相信有很多朋友在做三方登陆的时候会加入短信验证的功能,最近刚好被分配安排实现这一需求,本人新手一枚,特地去网上搜了资料,目前用的比较多的大汉.云通讯还有MOB的smssdk,对比之下,最终选择了完全免费的MOB产品试试手,下面就是我在使用sdk过程中一些心得,希望看到的大神给点建议,喜欢的给个小心心就好。
多文件上传是客户端与服务端两个的事,客户端负责发送,服务端负责接收 我们都知道客户端与服务器只是通过http协议进行交流,那么http协议应该会对上传文件有所规范 你可以根据这些规范来自己拼凑请求
前几天开发公司项目,有个地方要做一个分数的仪表盘,根据分数跑分,(设计的人估计是看到招商银行App的账号总览)
实验之后发现会卡在原来的界面,正确的解决办法:开一个runOnUiThread,如下所示:
零、前言 安卓的网络编程,服务端的知识是必不可少的,否则不知道该请求什么url,或不明白服务端是什么样的,总像是拼图少了一半 还好本人会些SpringBoot压箱底,这里提供了可访问的URL供大家测试,以及后端的具体实现的链接,感兴趣的可以看一下 本文安卓端基本上是根据慕课网上hyman的Android网络框架-OkHttp使用 敲的,懒得看文章的可以去看看视频 不过版本OKHttp3.X和视频中2.X稍有不同,还有本文服务端使用SpringBoot与视频不同 本文测试的url为已在服务器上,可
Android中Timer是一个普通的类,其中有几个重要的方法;而TimerTask则是一个抽象类,其中含有一个抽象方法run()。
今天给大家分享进度条自动前进功能的实现,先给大家分享实现效果图,感觉不错可以参考实现代码。
0,通俗易懂 粗暴的解释Android与蓝牙Ble之间的通信 - android小草 - 博客园 1,Activiy的生命周期 Activity生命周期 2,Android中的onActivityResult和setResult方法,Intent的使用 : 【已解决】Android的蓝牙实例代码中找不到REQUEST_ENABLE_BT 看完下面的内容就理解这儿了。Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_E
【OkHttp】OkHttp 简介 ( OkHttp 框架特性 | Http 版本简介 ) 【OkHttp】Android 项目导入 OkHttp ( 配置依赖 | 配置 networkSecurityConfig | 配置 ViewBinding | 代码示例 ) 【OkHttp】OkHttp Get 和 Post 请求 ( 同步 Get 请求 | 异步 Get 请求 | 同步 Post 请求 | 异步 Post 请求 )
在手机上有一个功能,但是需要使用电脑控制什么时候开始这个功能,然后上网搜索,找到了AndServer可以满足要求,我只是实现了简单的功能,如果感兴趣的话,可以深入的研究一下。
本文实例为大家分享了android canvas使用line画半圆具体代码,供大家参考,具体内容如下
websocket 给人的印象就是使用非常简单,比原生Socket像 Netty 等简单很多。无论服务端还是客户端都很简单
近期在游戏SDK接入的技术支持中,不断有游戏反馈希望有现成的unity插件可以直接接入,为了减轻和方便游游戏方接入,对SDK进行unity的插件开发
http://www.cnblogs.com/yangfengwu/p/8776712.html 先把源码和资料链接放到这里 链接:https://pan.baidu.com/s/10MxI8-Q33
链接: https://pan.baidu.com/s/1jpHZjW_7pQKNfN9G4B6ZjA 密码:nhn3
由于Android Application 主要是Java语言开发的,所以在写程序的时候,很多朋友们都会用到Java里面常用的数据结构,但是Android中提供了更加适合这个平台、好用的数据结构和API,下面来介绍一些常用的但并不是人人都知道的知识。 一、数据结构篇 1.SparseArray —— 替代HashMap,主要有以下几种 SparseLongArray SparseIntArray SparseBooleanArray SparseArray SparseArray比HashMap更省内存,它
看NBA的都知道MVP(National Basketball Association Most Valuable Player Award ,简称MVP)这个概念,我当时的第一反应也是这个。但是,此MVP非彼MVP.我们今天要讨论的MVP其实同MVC一样,是一种编程模式和思想,也许更准确地讲是一种架构。
界面布局,线性布局,EditText用户名,EditText密码,Button按钮
本文介绍了Android 简单的图片查看器源码实现,分享给大家,具体如下: public class MainActivity extends Activity { private EditText et_path; private ImageView iv; //创建handler 对象 // private Handler handler = new Handler(){ // // //处理消息 // public void handleMessage(android.os.Me
一个 toast 是在屏幕上弹出一条信息,它的大小总是包裹着需要显示的内容,并且当前的 Activity 依然是可见并且可互动的。toast会自动消失,并且不接受任何互动事件。因为 toast 可以在后台的 Service 中创建,所以即使这个应用程序没有显示在屏幕上,仍然可以弹出 toast.
本文介绍了Android 在子线程中更新UI的几种方法示例,分享给大家,具体如下:
Android 中可以通过webview来实现和js的交互,在程序中调用js代码,只需要将webview控件的支持js的属性设置为true
大家好,又见面了,我是你们的朋友全栈君。 public class MainActivity extends AppCompatActivity { String path="https://www.zhaoapi.cn/ad/getAd"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCon
Android 中可以通过webview来实现和js的交互,在程序中调用js代码,只需要将webview控件的支持js的属性设置为true Android(Java)与JavaScript(HTML)交互有四种情况: 1) Android(Java)调用HTML中js代码 2) Android(Java)调用HTML中js代码(带参数) 3) HTML中js调用Android(Java)代码 4) HTML中js调用Android(Java)代码(带参数) 代码如下: android端 MainActivi
SwipeRefreshLayout即是实现下拉刷新功能的核心类,它由support-v4库提供的。
如果应用启动,不在聊天界面,接收到消息后就弹出通知栏消息通知用户,点击进入聊天界面。
上面大致说的意思是EventBus再设置处理UI时只能在UI线程中,我使用的是 BACKGROUND
登录代码MVP架构的具体实现,分享给大家。 MainActivity.java public class MainActivity extends AppCompatActivity implements View.OnClickListener, Mvp.fff { private EditText mUsername; private EditText mPassword; private Button login; private ProgressDialog mProgressDi
com.flutter.guide.EventChannel 是 EventChannel 的名称,原生端要与之对应。
实现场景:手机A作为客户端,手机B作为服务端,通过Socket实现信息交互与处理。 如下图:客户端通过ip和端口连接服务器,客户端发送hello,服务端接收后,处理成大写发送给客户端,通过Toast
Retrofit是目前最主流的网络框架了,它对网络请求几近完美的封装,大大降低了我们开发者的研发难度,缩短了研发周期。最近项目中遇到了下载视频和图片文件的需求(还有上传视频和图片的需求,我会在下篇博客中讲解),我第一反应是用retrofit做呀,so easy!产品接着说,要带下载进度条哦!我一想,retrofit好像并没有给我们提供显示下载进度的接口,哎呀,看来还是得自己个儿整整喽!接下来,我把自己实现Retrofit带进度下载文件的流程分享给大家。
项目中有用到 @JavascriptInterface 来JS 、Java 通讯,但是 H5 报了一个异常,我在一个通讯方法里申请动态权限,后发现需要切换到主线程才行,其实是所有的 UI 操作都要切换到主线程,否则会抛出异常,后改为以下代码解决问题
如果是xmarin.forms,使用: try { Xamarin.Forms.Device.BeginInvokeOnMainThread(() => { MessagingCenter.Send(App.Current, "log", e1.Message +"\r\n"+ e1.Source); // 这里更新UI。
1、打开指定url网页; 2、点击链接可以跳转到下一页,并更新标题; 3、按back键或左箭头可以返回上一页; 4、当webview显示的是第一级url时, 按返回键或左箭头关闭当前界面; 5、WebView如何传值给android, 例如使用H5登录成功后返回姓名、token等等字段。 6、支持JavaScript, 支持显示js对话框。 7、无网络时显示默认布局, 以提高用户体验。 8、避免WebView的内存泄漏。
android字体闪烁动画,使用线程和Timer实现 public class ActivityMain extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); spark(); } private int clo = 0; public void spark()
_当然在开始之前,我们还要先在项目中添加OkHttp的依赖库,至于怎么在AndroidStudio中给项目添加OkHTTP依赖,这里将不再赘述。另外,OkHttp中使用了建造者模式,如果对建造者模式不了解,可以看看这篇博客设计模式之建造者模式_**
我们都知道Android是单线程模型,这意味着Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行,所以你单纯的new一个Thrad并且start()不行的,因为这违背了Android的单线程模型。
领取专属 10元无门槛券
手把手带您无忧上云