android教学"/>
徐松亮android教学
版权声明:本文为博主徐松亮的原创作品,未经允许不得转载,多谢支持!QQ:5387603
推荐点击此链接:欢迎进入徐松亮博客一站式导航搜索(随时更新)
既然叫杂项笔记,就是说杂乱无章的笔记,此笔记的主要目的不是为了教学,而是用于本人学习过程中的点滴记录,之所以开放,就是希望能给新手及爱好者些许点滴概念性帮助。
目录
1,开发环境搭建:
2,模拟器:Genymotion
3,手机开启开发模式
4, APK
5,反编译工具:
6,Android Studio编译C/C++
7,官方文档:
8,SDK包说明:
9,Android尺寸
单位
手机分辨率
10,Android体系结构:分为如下5层
11,Android studio主题(霸气黑主题)
12,Android Studio显示行号
13,Android studio常用快捷键
14,Android studio配置SDK与JDK路径
15,Android Studio的Project与Module概念
16, Android Studio的操作面板
17,Android Studio的Project文件列表说明
18,Android 的Activity模板
19,Android 的静态分析工具Android StudioLint
20,Android Studio自动升级后项目卡在Gradle sync的解决方案
21,常用文件类型
22,基本属性
23,注释
24,控件的触发
25,将原有的eclipse工程文件加载到Android studio
26,Android屏幕元素层次结构
27,Android的主题
28,Android创建UI的3种方式
29,Android常用控件
30,关于R类
31,关于this
32,Android的两种事件处理机制
33,Android的4大组件
Activites
Service
Broadcast Receivers
ContentProviders
组件间通讯(Intents框架)
34,Activity与Fragment(碎片)
35,Android调试信息打印---Log方法
36,Android消息提示框---Toast
37,Android对话框---AlertDialog
38,Android通知---Notofication
39,Android异常
40,Android的数据存储
SQLite
ContentProvider
File
41,Android的回收
WeakReference
SoftReference
42,网络通讯
使用HttpURLConnection访问网络
使用HttpClient访问网络
43,更新UI
44,进入Shell
45,问题解答(未完待续)
怎么能让程序持续运行
华为手机进入工厂设置(开启LOG)的神秘代码
Thread/Looper/Handler/Message/Intent
怎么能让程序持续运行
怎么能让程序持续运行
启动线程
怎么能让程序在各种屏幕都能运行
怎么设置开机自动启动
怎么设置程序升级
怎么把程序放到市场软件
源码被反编译后,怎么保证密码不泄漏
1,开发环境搭建:
- Android Studio+JDK
- Android Studio下载
- /
- JDK下载:
- .html
- 版本管理
- GIT下载:,并注册
- 在Android配置GitHub:Android Studio---File---Settings---Version Control---GitHub
- 配置Git安装路径:Android Studio---File---Settings---Version Control---Git
- 上传项目:Android Studio---VCS---import into Version control---Share project on GitHub
- Android Studio下载
2,模拟器:Genymotion
- 下载地址 /
- 网站用户名密码:xxxxxxx@qq/xxxxxx
3,手机开启开发模式
- 设置---关于手机---版本号 连续点击即可使能显示开发者配置
- 设置---开发人员选项,使能下面项目
- 开发人员选项
- USB调试
- 监控ADB安装应用
- 通过USB验证应用
- 阳光下可读性提升
- 使用旧版DHCP客户端
4, APK
- 安装包,其实就是zip格式,解压后是Dex文件
- Dex:Dalive VM executes
5,反编译工具:
- AndroidKiller_v1.3.1
- 包含了apktool、dex2jar、jd-gui等工具
6,Android Studio编译C/C++
- 安装相关插件(SDK Manager---SDK Tools)
- NDK 能在Android上面使用C/C++代码工具集
- Cmake 外部构建工具
- LLDB Android Studio上面调试本地代码的工匠
7,官方文档:
- 需要翻墙访问:.html
8,SDK包说明:
9,Android尺寸
-
单位
- 建议: sp用于文字大小单位。dp用于其他元素
- px 像素
- in 英寸
- mm 毫米
- pt 磅 1/72英寸
- dp 基于density抽象单位,在160点/英寸屏幕,1dp=1px
- dip 等同于dp
- sp 同dp相似,但会根据字体大小缩放
-
手机分辨率
- 4:3
- VGA 640*480 (Video Graphics Array)
- QVGA 320*240 (Quarter VGA)
- HVGA 480*320 (Half-size VGA) mdpi
- SVGA 800*600 (Super VGA)
- 5:3
- WVGA 800*480 (Wide VGA) hdpi
- 16:9
- FWVGA 854*480 (Full Wide VGA) hdpi
- HD 1920*1080 High Definition
- QHD 960*540 hdpi
- 720p 1280*720 标清 xhdpi
- 1080p 1920*1080 高清 xxhdpi
- 4:3
10,Android体系结构:分为如下5层
11,Android studio主题(霸气黑主题)
- file---set---Appearance---Theme--→Darcula
12,Android Studio显示行号
- file---set---Editor---General--- Appearance---Show line numbers
13,Android studio常用快捷键
- Alt + Enter 自动纠错提示,如自动导入类等
- Ctrl + 左键 跳转到定义处
- shift + shift 查找
- Ctrl + N 快速打开类
- Ctrl+Shift+N 快速打开文件
- Ctrl + E 最近编辑的文档列表
- Shift + 单击 关闭文件
- Ctrl + [ ] 跳到大括号头尾
- Ctrl+Shift+ Backspace 跳到上次编辑
- Ctrl + F12 显示当前文件结构
- Ctrl + F7 当前元素在当前文件的引用 F3可选择
- Ctrl + / 注释 取消注释 //
- Ctrl+Shift+ / 注释 取消注释 /**/
- Ctrl + D 复制并粘贴当前行
- Ctrl+Alt+ L 格式化代码
- Ctrl+Alt+ Backspace 代码提示
- Ctrl+Shift+ F7 高亮显
- F3 跳转下一个高亮处
- ESC 取消高亮显示
- logt 生成TAG
- logd 打印log.d()
- loge 打印log.e()
14,Android studio配置SDK与JDK路径
- file---Other Settings---Default Project Structure
15,Android Studio的Project与Module概念
- Project 工作空间(可以含有多个Module)
- Module 具体项目
16, Android Studio的操作面板
- Project面板(浏览项目文件)
- Build Variants面板(设置当前项目编译参数:release/debug)
- Android Monitor面板(监控调试信息)
- 编辑区
- Gradle面板(自动构建工具,Gradle任务列表,双击即可执行)
17,Android Studio的Project文件列表说明
- Project有多种显示模式,我们以Android模式显示。
- Res文件夹介绍
- drawable 待用的图片文件
- layout 布局文件
- mipmap 图标文件
- values 存放多个*.xml文件,包括各种配置/数据文件。
- dimens.xml 用于定义尺寸常量值。
- strings.xml 用于定义字符串常量值。
- styles.xml 用于定义应用程序的style。
18,Android 的Activity模板
- 项目右键new---Activity里面包含众多模板。
19,Android 的静态分析工具Android StudioLint
- 菜单---Analyze---Inspect Code,能够检测潜在错误。
- 在Analyze中还有很多分析工具有待于发掘。
20,Android Studio自动升级后项目卡在Gradle sync的解决方案
- 打开android studio项目目
- gradle\wrapper\gradle-wrapper.properties这个文件
- 按文件中distributionUrl 对应的网址下载文件
- 将下载的zip文件放到如下路径,之后重启工程
- C:\Users\Administrator\.gradle\wrapper\dists\gradle-x.x-all\x\
21,常用文件类型
- 布局文件:activity_main.xml (res/layout) 界面
- 源码文件:MainActivity.java (java/…/) 实现界面交互
- 配置文件:AndroidManifest.xml (manifests/) 全局配置文件
- 样式定义:styles.xml (res/values/)
22,基本属性
- 尺寸
- match_parent 父控件匹配
- fill_parent 与match_parent完全相同,但建议只在Android2.2版本以下使用。
- wrap_content 全部内容扩展匹配
23,注释
- java 与C一样
- xml
- 单行注释 <!-- 注释 -->
- 多行注释 <![CDATA[ 多行注释 ]]>
24,控件的触发
- 可以在xml配置里面调用方法,但是因为不在java源码里,读取代码时不好找,所有部分程序员不这样操作。
- 在java中自己编写触发事件,这个比较常用。
25,将原有的eclipse工程文件加载到Android studio
- 加入页面 xml文件
- 更新宏定义 res-->values文件
- 更新图片 res-→drawable
- 编码统一 用BCompare将编码同意改为UTF-8
- 添加配置 更新 AndroidManifest.xml
26,Android屏幕元素层次结构
- android.view.View
- AnalogClock(小部件 时钟)
- ImageView(图片)
- ImageButton
- 1....1. ZoomButton
- QuickContactBadge
- ImageButton
- KeyboardView(键盘视图)
- ProgressBar(进度条)
- TextView(文本,可超链接)
- CheckedTextView
- Button(按钮)
- 1....1. CompoundButton
- 1....1.1. CheckBox
- 1....1.2. RadioButton
- 1....1.3. ToggleButton(有状态按钮)
- 1....1. CompoundButton
- Chronometer
- DigitalClock
- EditText(编辑文本,首写字母大写/数字/密码/...)
- 1....1. AutoComplete TextView(自动补全)
- 1....1.1. MultAutoCompletTextView
- 1....2. ExtractEditText
- 1....1. AutoComplete TextView(自动补全)
- SurfaceView(视频播放-游戏视频)
- ViewGroup(视图容器)
- AbsoluteLayout(绝对布局)
- 1....1. WebView
- KeyboardView
- 1....1. AbsListView
- 1....1.1. GridView
- 1....1.2. ListView
- 1....1.2.1. ExpandableListView
- 1....2. AbsSpinner
- 1....2.1. Gallery
- 1....2.2. Spinner
- 1....1. AbsListView
- UnearLayoue
- 1....1. RadioGroup
- 1....2. TabWidget
- 1....3. TableLayout
- 1....4. TableRow
- 1....5. ZoomControls
- RelativeLayout(相对布局)
- 1....1. DialerFilter
- 1....2. TwolineListltem
- SlidingDrawer(滑动式抽屉)
- FrameLayout(层布局)
- 1....1. DatePicker(日期控件)
- 1....2. TimePicker(时间控件)
- 1....3. GestureOverlayView
- 1....4. ViewAnimator
- 1....4.1. ViewFlipper
- 1....4.2. ViewSwitcher
- 1....4.2.1. ImageSwitcher
- 1....4.2.2. TextSwitcher
- 1....5. HorizontalScrollView
- 1....6. ScrollView
- 1....7. MediaController
- 1....8. TabHost
- AbsoluteLayout(绝对布局)
- ViewStub(指定一个布局,提高UI加载性能)
27,Android的主题
- 在AndroidManifest.xml中设置
- @android:style/Theme.Dialog 将一个Activity显示为能话框模式
- @android:style/Theme.NoTitleBar不显示应用程序标题栏
- @android:style/Theme.NoTitleBar.Fullscreen 不显示应用程序标题栏,并全屏
- Theme.Light 背景为白色
- Theme.Light.NoTitleBar 白色背景并无标题栏
- Theme.Light.NoTitleBar.Fullscreen 白色背景,无标题栏,全屏、
- Theme.Black 背景黑色
- Theme.Black.NoTitleBar 黑色背景并无标题栏
- Theme.Black.NoTitleBar.Fullscreen 黑色背景,无标题栏,全屏
- Theme.Wallpaper 用系统桌面为应用程序背景
- Theme.Wallpaper.NoTitleBar 用系统桌面为应用程序背景,且无标题栏
- Theme.Wallpaper.NoTitleBar.Fullscreen系统桌面为应用程序背景,无标题栏,全屏
- Translucent 半透明
- Theme.Translucent.NoTitleBar 半透明、无标题栏
- Theme.Translucent.NoTitleBar.Fullscreen 半透明、无标题栏、全屏
- android:theme="Theme.Panel"
- android:theme="Theme.Light.Panel"
28,Android创建UI的3种方式
- 在XML种创建
- 在Activity类种创建
- 混合使用动态创建和XML布局创建(XSL主选)
29,Android常用控件
- TextView
- EditText
- AutoCompleteTextView
- MultiAutoCompleteTextView
- Button
- ImageView
- ImageButton
- ToggleButton(有状态按钮)
- CheckBox
- RadioButton、RadioGroup
- DatePicker、TimePicker
- ProgressBar
- SeekBar(滑块)
- Spinner(下拉列表)
- ListView(列表容器)、Grid(网格)
30,关于R类
- 在编译时会自动生成R类,为/res文件夹所有资源创建索引项
- Java访问语法:[<package_name>.]R.<resource_type>.<resource_name>
- XML访问语法:
- @[<package_name>:]<resource_type>/<resource_name>
31,关于this
- 当前对象的引用
- 本类的成员变量
32,Android的两种事件处理机制
- 监听机制
- 回调机制
- 事件处理程序与事件侦听器
- onClick()
- OnClickListener()
- onLongClick()
- OnLongClickListener()
- onFocusChange()
- OnFocusChangeListener()
- onKey()
- OnKeyListener()
- onTouch()
- OnTouchListener()
- onMenuItemClick()
- OnMenuItemClickListener()
- onClick()
33,Android的4大组件
-
Activites
- 活动组件(对应窗体,用户交互)
- 显示指定控件 setContentView(View)
- 在AndroidManifest.xml中定义首先加载的组件
- 切换/激活
- 普通切换方法(有去无回)
- 1....1. startActivity(Intent)
- 应答模式切换(有来有回)
- 1....2. A1-->A2:startActivityForResult(intent,0)
- 1....3. A2-→A1:setResult(RESULT_OK,intent)
- 1....4. A1接受方法:onActivityResult()
- 普通切换方法(有去无回)
- 4种状态
- Runing 运行状态
- Paused 暂停状态
- Stoped 停止状态
- Killed 注销状态
- 程序员可以绝对Active的生,但是不能决定死,由Android栈自动管理。
- 生命周期方法
- onCreate() 创建
- onStart() 开始
- onResume() 恢复
- onPause() 暂停
- onStop() 停止
- onRestart() 重启动
- onStart() 开始
- onDestroy() 注销
- onCreate() 创建
-
Service
- 概念:
- 服务组件(后台工作)
- 生命周期
- 调用startService 启动:不随启动Activity的结束而停止。
- 调用bindService 启动:随解绑或Activity的结束而停止。
- 注册
- <service android:name=“.LocalService” />
- 两种启动方式
- Context.startService() --- Context.stopService()
- Context.bindService() --- Context.unbindService()
- 回掉方法
- onStartCommand()
- onBind()
- onCreate()
- onDestroy()
- 概念:
-
Broadcast Receivers
- 广播接收器
- 发送广播(发送Broadcast Intent)
- 普通广播 Context.sendBroadcast()
- 有序广播 Context.sendOrderBroadcast()
- Context.sendStickBroadcast()
- 生命周期:常驻/非常驻
- 方法
- onReceive() 不能处理耗时程序,几秒没执行完会出现ANR错误
- ANR:Application No Response
- onReceive() 不能处理耗时程序,几秒没执行完会出现ANR错误
- 流程
- 注册receiver
- 静态注册(常驻):在AndroidManifest.xml
- 动态注册(非常驻,跟随程序的生命):在Java中
- 在onStart()中注册
- 在onStop()中注销
- 调用sendBroadcast()发送广播
- 调用onReceive()处理广播
- 调用startService()方法启动服务
- 调用stopService()方法停止服务
- 注册receiver
-
ContentProviders
- 内容提供者(共享数据操作)
-
组件间通讯(Intents框架)
- 组件切换 Intent
- 组件间信息传递构成
- Action 动作
- Data 动作数据
- Category 一个类别字符串
- Type 类型
- component 目标组件类名称
- extras 其他(如:Bundle)
34,Activity与Fragment(碎片)
- Activity中融入Fragment是非常棒的。
35,Android调试信息打印---Log方法
- Log类位于android.util包中,继承自java.lang.Object类
- 方法
- Log.v 黑色 输出任何消息
- Log.d 蓝色 输出debug故障日志信息
- Log.i 绿色 输出一般提示性消息(Log.w + Log.e)
- Log.w 橙色 输出warning警告日志信息(+Log.e)
- Log.e 红色 输出错误信息
36,Android消息提示框---Toast
- 不会获得焦点,不能被单击。
- 根据设定时间自动消失
- 引入包
- import android.widget.Toast
- 显示提示内容:
- Toast.makeText(对象,内容,时长).show();
- 设置显示位置:
- toast.setGravity()
- toast.setMargin()
37,Android对话框---AlertDialog
- 创建:AlertDialog.Builder.create()
38,Android通知---Notofication
- 导入类
- import android.app.PendingIntent;
- import android.app.NotificationManager;
- import android.app.Notification;
- 步骤
- 获取NotificationManager 对象
- 初始化Notification对象
- 设置通知显示参数
- 发送通知
39,Android异常
- try{}catch(...){}
- 常见异常
- Exception 总异常(以下所有异常类的父类)
- ClassCastException 类型转换异常
- ClassNotFoundException 未找到相应类异常
- ArithmeticException 算术异常
- ArrayIndexOutOfBoundsException 数组下标越界异常
- ArrayStoreException 数组中包含不兼容的值的异常
- SQLException 操作数据库异常类
- NullPointerException 空指针异常
- NoSuchFieldException 字段未找到异常
- NoSuchMethodException 方法未找到异常
- NumberFormatException 字符串转换为数字异常
- NegativeArraySizeException 数组元素个数为负数异常
- StringIndexOutOfBoundsException 字符串索引超出范围异常
- IOException 输入输出异常
- IllegalAccessException 不允许访问某类异常
- InstantiationException 当应有程序使用Class类中的呢我Instance()方法创建一个类实例,而指定的类对象无法被实例化,抛出此异常。
- EOFException 文件已结束异常
- FileNotFoundException 文件未找到异常
- 运行时异常 (RuntimeException)
- NullPointerException 空指针异常
- ArrayIndexOutOfBoundsException 数组下标越界异常
- ArithmeticException 算术异常
- ArrayStoreException 数组中包含不兼容的值的异常
- IllegalArgumentException 非法参数异常
- SecurityException 安全性异常
- NegativeArraySizeException 数组元素个数为负数异常
40,Android的数据存储
-
SQLite
- 类型:NULL、Integer、Real、Text、Blob(大数据)
- 包android.database.sqlite的方法
- beginTransaction()
- close()
- delete()
- endTransaction()
- execSQL()
- insert()
- openOrCreateDatabase()
- query()
- rawQuery()
- update()
-
SharedPreference
- 本质是XML文件,常用于参数设置,无法条件查询
- 类型:boolean、int、float、long、String
- 步骤
- 根据Context获取SharedPreferences对象
- 利用edit()方法获取Editor对象
- 通过Editor对象存储key-value键值对数据
- 通过commit()方法提交数据
- 常用方法
- contains()
- edit()
- getAll()
- getXXX()
-
ContentProvider
- 所有应用程序共享的存储方式,音频视频图片通讯录等
- 提供URI对象,由“content://”、数据路径,标识ID组成
- 数据包装器,可以把SQLite包装起来,实现非路径访问
- 步骤:
- 在当前应用程序定义一个ContentProvider
- AndroidManifest.xml中注册此ContentProvider
- 其他程序通过ContentProvider和Uri获取数据
-
File
- 用于存储大数据量的数据
- 两种操作方式
- Java提供的IO流体(仅当前程序可见,卸载即删除)
- 1....1. openFileInput()
- 1....2. openFileOutput()
- Environment类(全局可操作)
- 1....1. getExternalStorageDirectory()
- Java提供的IO流体(仅当前程序可见,卸载即删除)
41,Android的回收
-
WeakReference
- 弱引用 只有它指向object,并且GC运行,则回收object
- 实例
import java.lang.ref.WeakReference;public class WeakReferenceTest {/*** @param args*/public static void main(String[] args) {A a = new A();a.str = "Hello, reference";WeakReference<A> weak = new WeakReference<A>(a);a = null;int i = 0;while (weak.get() != null) {System.out.println(String.format("Get str from object of WeakReference: %s, count: %d", weak.get().str, ++i));if (i % 10 == 0) {System.gc();System.out.println("System.gc() was invoked!");}try {Thread.sleep(500);} catch (InterruptedException e) {}}System.out.println("object a was cleared by JVM!");}}
- 结果
Get str from object of WeakReference: Hello, reference, count: 1
Get str from object of WeakReference: Hello, reference, count: 2
Get str from object of WeakReference: Hello, reference, count: 3
Get str from object of WeakReference: Hello, reference, count: 4
Get str from object of WeakReference: Hello, reference, count: 5
Get str from object of WeakReference: Hello, reference, count: 6
Get str from object of WeakReference: Hello, reference, count: 7
Get str from object of WeakReference: Hello, reference, count: 8
Get str from object of WeakReference: Hello, reference, count: 9
Get str from object of WeakReference: Hello, reference, count: 10
System.gc() was invoked!
object a was cleared by JVM!
-
SoftReference
- 强引用 当系统内存不足时才回收,并后续自动启动
- 实例
import java.lang.ref.SoftReference;public class SoftReferenceTest {/*** @param args*/public static void main(String[] args) {A a = new A();a.str = "Hello, reference";SoftReference<A> sr = new SoftReference<A>(a);a = null;int i = 0;while (sr.get() != null) {System.out.println(String.format("Get str from object of SoftReference: %s, count: %d", sr.get().str, ++i));if (i % 10 == 0) {System.gc();System.out.println("System.gc() was invoked!");}try {Thread.sleep(500);} catch (InterruptedException e) {}}System.out.println("object a was cleared by JVM!");}}
- 结果
Get str from object of SoftReference: Hello, reference, count: 1
Get str from object of SoftReference: Hello, reference, count: 2
Get str from object of SoftReference: Hello, reference, count: 3
Get str from object of SoftReference: Hello, reference, count: 4
Get str from object of SoftReference: Hello, reference, count: 5
Get str from object of SoftReference: Hello, reference, count: 6
Get str from object of SoftReference: Hello, reference, count: 7
Get str from object of SoftReference: Hello, reference, count: 8
Get str from object of SoftReference: Hello, reference, count: 9
Get str from object of SoftReference: Hello, reference, count: 10
System.gc() was invoked!
Get str from object of SoftReference: Hello, reference, count: 11
Get str from object of SoftReference: Hello, reference, count: 12
Get str from object of SoftReference: Hello, reference, count: 13
Get str from object of SoftReference: Hello, reference, count: 14
Get str from object of SoftReference: Hello, reference, count: 15
Get str from object of SoftReference: Hello, reference, count: 16
Get str from object of SoftReference: Hello, reference, count: 17
Get str from object of SoftReference: Hello, reference, count: 18
Get str from object of SoftReference: Hello, reference, count: 19
Get str from object of SoftReference: Hello, reference, count: 20
System.gc() was invoked!
Get str from object of SoftReference: Hello, reference, count: 21
Get str from object of SoftReference: Hello, reference, count: 22
Get str from object of SoftReference: Hello, reference, count: 23
Get str from object of SoftReference: Hello, reference, count: 24
Get str from object of SoftReference: Hello, reference, count: 25
Get str from object of SoftReference: Hello, reference, count: 26
Get str from object of SoftReference: Hello, reference, count: 27
Get str from object of SoftReference: Hello, reference, count: 28
42,网络通讯
-
使用HttpURLConnection访问网络
- 创建一个URL对象
- URL url=new URL();
- 利用HttpURLConnection对象从网络中获取数据
- HttpURLConnection conn=(HttpURLConnection)url.openConnection();
- 设置连接超时
- conn.setConnectionTimeout(6*1000);
- 对相应吗进行判断:
- if(conn.getResponseCode() !=200)throw new RuntimeException("请求url失败")
- 得到返回的数据流:
- InputStream is =conn.getInputStream();
- 输入流转为字符串
- String result=readData(is,"GBK");
- 关闭连接
- conn.disconnect();
- 创建一个URL对象
-
使用HttpClient访问网络
- 说明:增强版的HttpURLConnection,不执行JavaScript/不解析处理内容
- 创建HttpClient对象
- 创建请求方法的实例,并指定请求URL
- 发送请求参数
- 调用HttpClient对象的execute发送请求
- 调用HttpResponse的getAllHeaders()等方法获取响应
- 释放连接
43,更新UI
- Thread+Handler机制
- 由新线程发送消息,再由主线程Handler处理消息
- Handler对象发送消息方法
- postMessage()
- sendMessage()
- sendEmptyMessage()
- Handler对象接收消息方法
- handlerMessage()
- hasMessage()
- Handler消息机制的4个关键对象
- Handler 处理者
- Message 消息数据结构
- MessageQueue 消息队列
- Looper 每个线程中MessageQueue的管家
44,进入Shell
- 工具
- 路径:Android\sdk\platform-tools
- 工具:在终端中打入指令adb shell
- 注意
- 在360等各个软件助手开启时,命令出错,因为抢占端口。
45,问题解答(未完待续)
-
怎么能让程序持续运行
-
华为手机进入工厂设置(开启LOG)的神秘代码
- *#*#2846579#*#*
-
Thread/Looper/Handler/Message/Intent
- Handler 组件内用于线程间的通讯的消息队列
- Intent 组件间的通讯
- Looper 消息轮询器
- 发现新消息,调用handlemessage方法
- Message 消息
-
怎么能让程序持续运行
-
怎么能让程序持续运行
-
启动线程
-
怎么能让程序在各种屏幕都能运行
-
怎么设置开机自动启动
-
怎么设置程序升级
-
怎么把程序放到市场软件
-
源码被反编译后,怎么保证密码不泄漏
- 答:用不对称加密技术
- 答:用不对称加密技术
更多推荐
徐松亮android教学
发布评论