private void restartApplication() { final Intent intent = getPackageManager().getLaunchIntentForPackage(getPackageName()); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); }…
Android自动打包流程详细图: 步骤一和步骤二参考:[原]Android打包之Eclipse打包 步骤三:编写build.xml <?xml version="1.0" encoding="UTF-8"?> <project name="AndroidTouchDemo"> <!-- 指定配置文件 --> <property file="default.properties">…
首先新建一个app然后添加 android:sharedUserId="android.uid.system" 再添加重启的权限 <uses-permission android:name="android.permission.REBOOT"/> 然后代码: public void reboot(Context context){ LogsUtil.i(TAG, " reboot"); Intent i = new Intent(I…
首先, 官方google play对APK大小有限制: 50M.( https://support.google.com/googleplay/android-developer/answer/113469?hl=en ) 所以想通过google play发布大数据的应用的话, 得通过扩展包, 一个叫做OBB(Opaque Binary Blob)的东西, 最大可以存储4G的数据 (国内的奇葩山寨文化就不要管提了). OBB是app使用的数据文件, google play并不关心其内容, 下载到…
示例项目:JPushExample(349872) 打开项目的文件夹目录,找到:JPushExample(349872)\app\build.gradle打开,将里面的 compileSdkVersion. buildToolsVersion. defaultConfig改为自己用Android Studio新建的项目中的那些对应的数据项,再重启项目就好. 下面是文件夹图示:…
遵从准则 暴露您view中所有影响可见外观的属性或者行为. 通过XML添加和设置样式 通过元素的属性来控制其外观和行为,支持和重要事件交流的事件监听器 详细步骤见:Android 自定义View步骤 样子 支持的样式 可以通过XML定义影响外边和行为的属性如下 边框圆角值,边框颜色,分割线颜色,边框宽度,密码长度,密码大小,密码颜色 <declare-styleable name="PasswordInputView"> <attr name="border…
摘要:alertdialog中加入edittext但是不弹出软键盘等问题网上有很多不管用的解决方案, 本文意在给出更有效的解决办法,并初步探究其原因 正文 在对话框中插入文本框是十分常见的需求 通常我们选择在代码中创建edittext对象 这个时候就需要在代码中给edittext设置输入属性了 但是经常发现设置的属性不起作用,甚至都不弹出软键盘(虽然实体键盘可以输入) 问题的解决方案有很多种,这里介绍一种我比较常用的方法: inputPassEditText.setInputType(Input…
1 Handler的基本概念: 什么是handler? Handler是安卓系统的一种回调机制. handler的作用? 他的作用是用于不同线程之间的通讯.一是可以用于子线程与UI线程的数据通信,因为只有UI线程可以更新UI,子线程如果想要更新界面就需要用Handler通过发送Message来更新UI,而UI线程在handlerMessage方法中处理传过来的Message数据.二是可以用于Handler绑定的线程延迟发送消息. 2 那么为什么只有UI线程才能更新UI呢? 主要是为了解决多线程并…
例子如下:Android 自定义View 密码框 例子 1 良好的自定义View 易用,标准,开放. 一个设计良好的自定义view和其他设计良好的类很像.封装了某个具有易用性接口的功能组合,这些功能能够有效地使用CPU和内存,并且十分开放的.但是,除了开始一个设计良好的类之外,一个自定义view应该: l 符合安卓标准 l 提供能够在Android XML布局中工作的自定义样式属性 l 发送可访问的事件 l 与多个Android平台兼容. Android框架提供了一套基本的类和XML标签来帮您创…
Android快速开发框架 UI组件,不止是简单整合,更易用 沉浸式状态栏,界面更漂亮 左滑返回,非常流畅 简单.可复用.易扩展的底部导航 PagerSlidingTabStrip,导航标签文字颜色和选中时文字颜色,都可以通过xml设置 轮播图,自动+无限轮播 启动导航图SplashActivity,或许不用改就可以用 查看大图,集成了PhotoView的可用Activity,你不用再写了 QuickAdapter快速的Adapter开发,不用在重复写ViewHolder类 如果发现ListVi…
遵从准则 暴露您view中所有影响可见外观的属性或者行为. 通过XML添加和设置样式 通过元素的属性来控制其外观和行为,支持和重要事件交流的事件监听器 详细步骤见:Android 自定义View步骤 样子 支持的样式 可以通过XML定义影响外边和行为的属性如下 边框圆角值,边框颜色,分割线颜色,边框宽度,密码长度,密码大小,密码颜色 <declare-styleable name="PasswordInputView"> <attr name="border…
GPU过度绘制 打开开发者选型,"调试GPU过度绘制",蓝.绿.粉红.红,过度绘制依次加深 粉红色尽量优化,界面尽量保持蓝绿颜色 红色肯定是有问题的,不能忍受 使用HierarchyView分析布局层级 删除多个全屏背景:应用中不可见的背景,将其删除掉 优化ImageView:对于先绘制了一个背景,然后在其上绘制了图片的,9-patch格式的背景图中间拉伸部分设置为透明的,Android 2D渲染引擎会优化9-patch图中的透明像素.这个简单的修改可以消除头像上的过度绘制. 缩短Vi…
1.动画也可以设置监听事件,例如在动画结束时需要执行某操作 把要执行的代码写在onAnimationEnd()回调方法中即可: anim.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Over…
帧动画的使用需要在xml文件中指定每一帧所对应的图片 animation-list写法如下: <?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@drawable/b1"…
最近尝试了一下Android的Gradle打包,发现确实比Ant打包会方便很多,特此记录下来. 注:android的gradle现在插件的版本已经是0.14.3了,对于一些老的方法和api,有一些已经被移除,无法使用(http://tools.android.com/tech-docs/new-build-system/migrating-to-1-0-0),以下这些属性改名,原先的不能用: runProguard -> minifyEnabled (是否混淆) zipAlign -> zip…
Android自动打包流程详细图: 在前面一些博客我们知道了如何通过命令行打包,如何通过Eclipse打包,如何通过编写shell脚本来进行打包,但是这些都不能很好的跨平台进行打包. 因Python本身具有很好的跨平台特性,故本博就是通过使用Python来进行编写跨平台打包脚本,脚本如下(build.py): #!/bin/python # build Android application package (.apk) from the command line using the SDK t…
1,安装adt插件,cdt插件2,SDK目录配置: Eclipse文件菜单选择“Window”--->“Preferences”--->“Android”--->设置“SDK Location”--->”Browse”选择SDK目录即可. 如下图: NDK目录配置: 设置完SDK后还需在“Android”配置项上设置下“NDK”,选择NDK后,有一个选项“NDK Location”,这里配置NDK根目录.3,设置build参数,在project->properties->…
一.形象的感官一下流畅度概念 1. 这是官方给出的概念:Android流畅运行,需要运行60帧/秒, 则需要每帧的处理时间不超过16ms. 2. 每秒帧数,实际上就是指动画或视频每秒放映的画面数.因此“帧”的概念就是指“画面”,1幅画就叫做“1帧”,每秒帧数指的就是“每秒播放的画面数”.帧数就是在1秒钟时间里传输的图片的量,也可以理解为图形处理器每秒钟能够刷新几次,通常用fps(Frames Per Second)表示.每一帧都是静止的图象,快速连续地显示帧便形成了运动的假象.高的帧率可以得到更…
通过BitmapFun在项目中使用,结合代码了解一下BitmapFun加载图片的原理,以及最佳使用实践.本文说明不包括BitmapFun的缓存部分. Android开发在使用ListView和GridView时,可能会有很多网络图片需要加载,通常我们会为每个图片加载启动一个Thread或者直接使用官方提供的AsyncTask,来做Http异步加载,但当每个ImageView子视图都触发一个AsyncTask来异步加载图片时,这样就会产生如下问题: 1. 当用户快速滑动时,ImageView已经被…
原因 开发过程中遇到button.performClick()无效,原因是View.performClick()需要再UI线程中调用才会有效执行. 响应系统调用的方法(比如报告用户动作的onKeyDown()或一个生命周期回调方法)永远在界面线程中进程,所以onCreate里面调用button的performClick没问题, 而通过code直接调用相当于是代码执行,并不会触发android的UI线程. 什么是UI线程,以下来自官网翻译 当一个应用被启动,系统创建一个执行线程,叫做"main&q…
前提:C:\Users\Administrator\AndroidStudioProjects文件夹中存在xxx.jks秘钥文件,比如: 进入Android Studio的Terminal: Microsoft Windows [版本 6.1.7600] 版权所有 (c) 2009 Microsoft Corporation.保留所有权利. C:\Users\Administrator\AndroidStudioProjects\HelloTrace>keytool -v -list -keys…
一堆so文件安装不正确: apk里面都是全的, 但是安装完后/data/data/$pkg/lib下面就没有 google了好长时间没有结果.最后发现是因为没库有加lib前缀(当时想了一下觉得不加更好,更合胃口)....现在加上lib前缀OK了. 怀疑package manager在安装apk的时候把所有没有lib prefix的so给忽略了这种剧情设定太坑爹了.不使用官方mk真是吃尽苦头啊. ndk上坑太多: dlopen()还不支持RTLD_NODELETE,又得黑代码了. apk源的/li…
之前sem_open在iOS上, 创建命名的semaphore没有问题 (iOS不支持匿名的semaphore), 但是现在Android平台的sem_open时候报错,返回ENOSYS. 命名的semaphore因为有名字,可以在不同进程间访问, 幸好我这里不需要进程间共享和通信, 直接使用匿名semaphore也可以. (貌似匿名的semaphore也可以通过mmap实现进程共享和通信.但目前没有需求). 使用sem_init 和 sem_destroy代替 sem_open和 sem_cl…
我们说handler是开启了另外一个线程,而且看代码的话确实是这样,实现了runnable接口,这在java中就是开启了一个线程,但是情况中的是这样吗?我们不妨来做个试验,如下 import android.app.Activity; import android.os.Bundle; import android.os.Handler; public class handlerThread extends Activity { /** Called when the activity is f…
问题 webView调用JS出错. class TestJS {         ......         public TestJS(){         }                  public void save(String data){                         webView.loadUrl("javascript: alert(" + data +")");         }         ......     …
[Date]2014-04-20 [Author]wintys (wintys@gmail.com) http://wintys.cnblogs.com [Keywords]android . 离线android sdk [Environment]Window 7 . Android SDK 22.6.2.Eclipse Java EE Kepler  [Content]: 1 软件下载 (1) JDK :   http://www.oracle.com/technetwork/java/jav…
由于众所周知的原因,国内更新Android SDK一直是个老大难的事情,一般都要到处找VPN之类的工具来曲线救国.不过其实谷歌已经帮我们想到这点了,我们自身就可以解决问题,步骤如下: 打开SDK Manager,点击Tools->Options,打开设置界面,然后进入http://www.androiddevtools.cn/,找一个顺眼的IP和端口,如 上海GDG镜像服务器地址: http://sdk.gdgshanghai.com 端口:8000 填在上方界面的HTTP Proxy Serv…
package com.xproject.utility; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import android.app.Activity; import android.app.AlarmManager; import android.app.PendingIntent; import…
软件的自动更新一般都与Splash界面绑定在一起, 由于需要维护的软件界面很复杂, 一个Activity中嵌入ViewPager, 并且逻辑比较复杂, 索性重新写一个Activity, 现在的软件都很流行使用Splash界面, 正好与自动更新配套在一起; 在这个自动更新Splash中, 使用到了 动画设置 ,SharedPerference ,pull解析 ,dialog对话框 ,http网络编程 ,handler 等. 注意一个错误 : 已安装具有该名称和不同签名的数据包 , 早上测试人员报告…
来自知乎:https://www.zhihu.com/question/48130951?sort=created   大家都知道Android的Looper是ThreadLocal方式实现,每个线程对应自己的Looper和MessageQueeu.假如我在子线程thread1中用handler.sendEmptyMessage(1)发了个消息,按源码的理解是把消息发送到了thread1线程的MessageQueue里. 另一方面,来看运行在main线程的handleMessage,调用它的地方…