
Android:基础/技巧
文章平均质量分 51
丁大黄
Android开发
展开
-
【Android】Android 服务保活/常驻
配合 android.support.v7.AlertDialog 引导用户将 App 加入白名单.防止重复启动Service,调用startService(Intent i)时检查。工作服务运行在主进程中,免去与服务通信需使用AIDL或其他IPC方式的麻烦。参考了 Poweramp, 启动的前台服务与 UI 运行在同一进程中。守护服务 : 定时检查服务是否在运行,如果不在运行就拉起来。若服务还在运行,就什么也不做;若服务不在运行就拉起来。建议只在App的核心功能需要保活/常驻时使用。原创 2024-11-27 14:20:04 · 705 阅读 · 0 评论 -
【Android】runOnUiThread的使用
@Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_test: this.runOnUiThread(new Runnable() { @Override public void run() { mBt..原创 2021-05-17 18:05:51 · 512 阅读 · 0 评论 -
【Android】转成AndroidX
1 更新升级插件将AS更新至 AS 3.2及以上;Gradle 插件版本改为 4.6及以上;项目下 gradle/wrapper/gradle-wrapper.propertie 文件中的distributionUrl改为:distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip 或以上compileSdkVersion 版本升级到 28及以上;buildToolsVersion 版本改为原创 2021-04-27 20:20:36 · 794 阅读 · 0 评论 -
【Android】进程保活
1 Android进程的优先级Foreground processVisible processService processBackground processEmpty process 唯一目的:做缓存,缩短下次运行组件所需的启动时间2 Android进程的回收策略Low memory killer:通过比较复杂的评分机制,对进程打分,将分数高的进程判定为bad进程,杀死并释放内存。OOM_ODJ:判别进程的优先级。3 进程保活方案利用系统广播拉活缺点:可以通过在And原创 2021-04-26 20:04:12 · 149 阅读 · 0 评论 -
【Android】Android长按复制文本功能
安卓一般能用到长按复制的控件Textview,Editext,可能也有WebView在开始之前先说一个我遇到的一个坑:viewGroup中有一个这个属性android:descendantFocusability=”blocksDescendants”这个属性有三个值:beforeDescendants:viewgroup会优先其子类控件而获取到焦点afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点blocksDescendants:vie原创 2021-04-25 19:33:05 · 7493 阅读 · 0 评论 -
【Android】Android架构:MVC-MVP-MVVM深度、高质量学习
1 MVC(模型、视图、控制器)介绍MVC:在Android开发过程中,曾经比较流行的框架是MVC模式。采用MVC模式,便于UI界面的显示、和业务逻辑的分离。具体来说:M层Model层,用来做具体逻辑的处理,会进行一些数据库的操作、网络操作等,这些复杂耗时的操作可以在Model层进行处理。V层View层,用于处理数据显示的部分。XML布局可以视为View层。C层Controller层,Android中Activity主要用于处理用户交互问题,可以视作Controller。然后从Model层读原创 2021-04-24 21:16:56 · 369 阅读 · 5 评论 -
【Android】Android点击事件:实现点击空白处让EditText失去焦点并收起系统软键盘
这里我的解决思路就是通过事件的分发来判断手指点下的位置,是不是editText。如果点击的是editText那么就按照原来正常进行;如果点击的不是editText那么就应该让editText失去焦点并收起键盘。所以一共有三个点:在哪里截取点击事件并进行处理?如何判断点击位置是否为editText的位置?如何收起软键盘并让editText失去焦点?一个一个来看:首先我们可以在Activity的dispatchTouchEvent方法中截取点击事件。至于为什么,这个是关于点击事件分发的相关内容;转载 2021-04-14 20:06:23 · 2035 阅读 · 1 评论 -
【Android】Android项目将module打包成aar文件
版权声明:本文为CSDN博主「娃哈哈19910206」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/a872822645/article/details/81120193打开Studio 右上角。Gradle–>要打包的Module–>Tasks—>build–> 注意 。。这里有好几个选项assemble 这是同时打 debug 包 和 release 包assembleDebu转载 2021-04-12 19:32:57 · 332 阅读 · 0 评论 -
【Android】组件化
组件化1 Gradle1.1 打印信息Gradle构建工具,Groovy脚本语言基本Java做了拓展,Gradle = JDK + Groovy新建工程,在app的build.gradle中,添加:println("hello gradle")或println "hello gradle"同步时,在Build中可以看到打印出来的信息:> Configure project :apphello gradle> Configure project :libraryhell原创 2021-04-11 21:58:00 · 3319 阅读 · 0 评论 -
【Android】ARouter路由快速上手
官方网站:https://github.com/alibaba/ARouter查看最新版本:1.添加依赖app的build.gradle:android { defaultConfig { ... javaCompileOptions { annotationProcessorOptions { arguments = [AROUTER_MODULE_NAME: project.getName()]原创 2021-04-11 21:55:02 · 222 阅读 · 0 评论 -
【Android】android异常与性能优化深度、高质量学习
1. anr异常1.1 anr是什么Application Not Responding ,应用程序无响应的弹框1.2 造成anr的原因应用程序的响应性是由Activity Manager和WindowManager系统服务监视的。当检测到Activity或者BroadcastReceiver中,5秒或10秒没有执行完任务之后,安卓就会弹出ANR对话框,具体是两种情况:在Activity或Service中,5秒内无法相应用户的输入事件;在BroadcastReceiver中,10秒内无法执行原创 2021-04-11 21:54:04 · 183 阅读 · 0 评论 -
【Android】Android项目构建深度、高质量学习
1. AS目录结构首先左上切换到Project目录下.idea :系统自动生成的关于AS的配置目录(版权,jar包等)gradle:Gradle目录(项目构建工具)app:AS创建工程中的一个ModuleExternal Libraries:依赖文件(版本号,SDK等)app中:build://构建目录,系统自动生成的编译目录libs://依赖包存放目录src://源码,资源目录androidTest://系统自动生成的用于测试的目录main://主目录 java://Jav原创 2021-04-10 14:31:03 · 125 阅读 · 0 评论 -
【Android】在Java代码中获取strings.xml中的字符串
Toast.makeText(this, R.string.state_connected, Toast.LENGTH_SHORT).show();Toast.makeText(getApplicationContext(), getResources().getString(R.string.state_connected) + mConnectedDeviceName, Toast.LENGTH_SHORT).show();原创 2021-03-05 10:17:16 · 1654 阅读 · 1 评论 -
【Android】权限申请
在AndroidMenifest.xml中申请权限如下:<!-- 调用手机震动权限 --><uses-permission android:name="android.permission.VIBRATE" /><!-- 保持屏幕常亮 --><uses-permission android:name="android.permission.WAKE_LOCK" /><!--用于进行网络定位--><uses-permission a原创 2021-03-05 09:44:40 · 1221 阅读 · 2 评论 -
【Android】修改工程为另一个工程需要做的3件事
1、在java下的com.dj.roombasic上右键,修改包名,最后需要Do Refactor2、 strings.xml中Words3、build.gradle(:app)中applicationId “com.dj.words”原创 2021-02-23 18:22:32 · 166 阅读 · 0 评论 -
【Android】1像素Activity保活
在写Android中1像素Activity的时候,遇到问题:You need to use a Theme.AppCompat theme (or descendant) with this activity解决办法参考具体如下:1 MainActivity不要继承自AppCompatActivity,而是继承自Activity;2 AndroidMenifest.xml中application中的主题去掉,activity中的主题加上<application andro原创 2021-02-23 18:21:27 · 1587 阅读 · 0 评论 -
【Android】定时器Timer的使用与注意点
MainActivity.java中// 定义全局静态变量,定时器1public static ControlPollingTimer.MsgTimer timer_controlPolling_bj1 = new ControlPollingTimer.MsgTimer();// 业务实现类class TestFuncOnClickListener implements View.OnClickListener { @Override public void on原创 2021-01-15 18:26:52 · 1034 阅读 · 0 评论 -
【Android】事件分发机制 + OnLongClickListener长按事件返回值
事件分发机制,包括:Activity事件分发流程ViewGroup事件分发流程View事件分发流程1. Activity事件分发流程2. ViewGroup事件分发流程ViewGroup中的dispatchTouchEvent函数做的3件事:去判断是否需要拦截事件在当前ViewGroup中,找到用户真正点击的View分发事件到View上3. View事件分发流程默认的事件分发流程:MainActivity:dispatchTouchEventMyViewGroup:原创 2021-01-05 20:00:26 · 543 阅读 · 0 评论 -
【Android】解决长按事件和短按事件同时响应的问题
这个需要从事件分发机制说起,在按钮响应事件的时候,如果同时绑定了长按和点击事件,长按事件触发时默认不做处理的话会优先响应长按事件,如果在长按事件里面你没有消费掉该事件,根据安卓的事件分发机制,该事件会继续向下传递,直到有控件把它消费掉为止。明白了这个道理,长按事件和短按事件同时响应的问题就不难解决了,在同时绑定两个事件的情况下,如果先点击的是短按事件没问题,自然触发不到长按事件,但是如果先触发的是长按事件如果当前return false的话代表当前事件需要继续向下传递所以短按事件就被响应了,这种情况在onL原创 2021-01-05 09:17:57 · 1879 阅读 · 0 评论 -
【Android】viewpager的setOffscreenPageLimit方法作用
大家都知道,viewpager是默认预加载下一页的界面的。viewpager提供了一个设置预加载页面数量的方法,那就是setOffscreenPageLimit()。默认不设置数量的情况下预加载下一页。设置0和1是同样的效果。修改setOffscreenPageLimit的值为2,运行程序。显示第一页第二页第三页都创建了然后往右滑到第二页,第四个界面创建了,滑到第三页,第五个界面创建了。再往右滑到第四页,第一个界面销毁。viewpager每次切换的时候, 会重新创建当前界面及左右界面三个界面, 每次切原创 2020-11-20 10:51:27 · 4458 阅读 · 0 评论 -
【Android】工程依赖
tips:生成和使用aar:https://zhuanlan.zhihu.com/p/22242264https://blog.csdn.net/zhangpengzp/article/details/82351244依赖重复的时候:无冲突,以最高版本为主有冲突,报错,留一个就行原创 2020-11-05 11:14:17 · 180 阅读 · 0 评论 -
【Android】NDK开发
Native Development Kit 原生开发工具包,支持C/C++1、NDK优缺点2、一步一步实现简介:https://juejin.im/post/68449040315092828291、在main下新建cpp文件夹(与java文件夹平级),放入.cpp和.h以及1个CMakeLists.txt文件如果cpp文件中其实使用c语言实现的,那么.h中的每个函数前都用extern “C” ;如果不止一个cpp文件,那么CMakeLists.txt中:add_library(rsa /原创 2020-11-05 10:37:05 · 548 阅读 · 0 评论 -
【Android】Notification提醒Android10可用
参考:https://blog.csdn.net/hgy413/article/details/88539924// 通知与提醒 Intent stateIntent = new Intent(this, MusicButtonActivity.class); PendingIntent statePendingIntent = PendingIntent.getActivity(this, 0, stateIntent, PendingIntent.FLAG_CANCEL原创 2020-11-04 20:23:48 · 345 阅读 · 0 评论 -
【Android】删除数组中的指定内容时,遍历数组的for循环中的上限条件不能是正在变化的数组长度值
如题,解决方法是:在函数内创建一个副本数组把符合要求的元素,从原始数组拷贝到副本数组清空原始数组将副本数组内容拷贝到原始数组Over// 删 删除全部数据private void deleteFreqsFromDatabase(String freqClass) { mSQLiteDatabase = mDatabaseHelper.getWritableDatabase(); mSQLiteDatabase.delete(FREQ_TABLE_NAME, "freqC原创 2020-11-04 10:59:06 · 607 阅读 · 0 评论 -
【Android】Android中运行Shell命令
具体使用方法:ShellUtils.CommandResult result = ShellUtils.execCommand("ip neigh",false); //主要是这条语句,字符串中是命令Log.i(TAG,"result1.result = " + result.result);Log.i(TAG,"result1.successMsg = " + result.successMsg); // 有用的信息在这里,可以打印出来看看Log.i(TAG,"result1.errorMsg原创 2020-11-03 16:05:09 · 3158 阅读 · 0 评论 -
【Android】ListView使用方法、原理及优化
暂存转载 2020-10-19 20:55:36 · 1452 阅读 · 0 评论 -
【Android】Android 开发小知识点收集
1、获取手机运行时最大可占用内存int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);Log.d(“TAG”, "Max memory is " + maxMemory + “KB”);2、改变dialog 在不同窗口内显示不同的大小//在dialog.show()之后调用public static void setDialogWindowAttr(Dialog dlg,Context ctx){Window window转载 2020-10-15 23:13:41 · 199 阅读 · 0 评论 -
【Android】Android 开发常用工具类收集
说在前面,以下工具类可以大大的提高安卓开发者的开发效率1、偏好设置(ShareUtils)import android.content.Context;import android.content.SharedPreferences;/**Content:偏好设置工具类Actor:韩小呆 ヾ(✿゚▽゚)ノTime: 15:44*/public class ShareUtils {public static final String NAME = “config.hxd”;转载 2020-10-15 23:01:16 · 1148 阅读 · 0 评论 -
【Android】Android使用jar包方法记录
1、导入*.jar包为了添加一个第三方已经打包好的jar文件进你项目,打开Android项目的Project模式,在项目中app目录下的libs文件夹,直接通过COPY/PAST把你下载的jar文件拷贝到libs文件夹下:2、使jar包生效右键项目,选择下方的Open Module Settings,在弹出的页面点击下方的app,点击右方的Dependencies,点击右上方的添加依赖按钮(绿色加号),选择2 jar dependency,在弹出的对话框中选择新添加到libs中的jar文件,OK,第原创 2020-06-16 14:55:34 · 681 阅读 · 0 评论