
简记
打不死的迪仔
这个作者很懒,什么都没留下…
展开
-
LayoutInflater的inflate()方法参数说明
这里以ListView的适配器为例说明,在适配器的getView()方法中,我们在加载ListView的子项布局时,会这样写: View view = LayoutInflater.from(getContext()).inflate(resourceId, parent, false); 前两个参数我们已经知道是什么意思了,第三个参数指定成false,表示只让我们在父布局中声明的...原创 2018-02-26 09:36:24 · 999 阅读 · 3 评论 -
快速判断当前所在活动,快速退出程序
如何知道当前在哪个活动 新建BaseActivity(继承自AppCompatActivity)但不需要注册,在onCreate()方法中写Log.e(“BaseActivity”, getClass().getSimpleName()),最后修改让BaseActivity成为项目中所有活动的基类。如何随时随地退出程序2.1. 编写活动管理器public class Activit...原创 2018-02-22 19:00:07 · 163 阅读 · 0 评论 -
通知的使用
相比于广播接收器和服务,在活动里创建通知的场景还是比较少的,一般只有当程序进入到后台的时候我们才需要使用通知。但是无论在哪里创建通知,整体的步骤都是相同的。NotificationManager manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); 由于几乎Android系统的...原创 2018-03-02 10:41:52 · 264 阅读 · 0 评论 -
android多媒体之播放音视频
播放音频 在Android中播放音频文件一般都是使用MediaPlayer类来实现,它对多种格式的音频文件提供了非常全面的控制方法。常用的控制方法有:setDataSource(), prepare(), start(), pause(), reset()(将MediaPlayer对象重置到刚刚创建的状态), seekTo(), stop()(停止播放音频,调用这个方法后的MediaPlay...原创 2018-03-03 00:56:36 · 2138 阅读 · 0 评论 -
百分比布局
在常用的布局LinearLayout, RelativeLayout, FrameLayout中,只有LinearLayout支持使用layout_weight属性来实现按比例指定控件大小的功能,其它两种布局都不支持。 为此,Android引入了一种全新的布局方式来解决这个问题——百分比布...原创 2018-02-25 00:55:04 · 288 阅读 · 0 评论 -
左中右结构标题栏实现技巧
标题栏: 两种实现方式: 1. 使用RelativeLayout(这种方式在此不实现) 2. 使用LinearLayout(重点介绍)<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ...原创 2018-02-25 01:43:43 · 871 阅读 · 0 评论 -
android调用摄像头拍照
该功能使用到的场景比较多,下面能过一个实例介绍其使用,布局比较简单只有两个控件,上面Button下面ImageView,Button用于打开摄像头进行拍照,而ImageView用于将拍到的图片显示出来。public class CameraTestActivity extends AppCompatActivity { public static final int TAKE...原创 2018-03-05 11:12:28 · 233 阅读 · 0 评论 -
WebView最基本设置使用说明
...WebView webView = (WebView)findViewById(R.id.web_view);webView.getSettings().setJavaScriptEnabled(true);webView.setWebViewClient(new WebViewClient());webView.loadUrl("http://www.baidu.com");.....原创 2018-03-05 11:48:38 · 310 阅读 · 0 评论 -
OkHttp基本使用
添加依赖库 compile 'com.squareup.okhttp3:okhttp:3.4.1' //可以自行修改成最新版本Get请求 OkHttpClient client = new OkHttpClient();Request request = new Request.Builder() .url("http://www.baidu.com") //可以连...原创 2018-03-05 13:39:48 · 156 阅读 · 0 评论 -
json解析的常用方式(不使用第三方库)
解析json数据有很多种方法,可以使用官方提供的JSONObject,也可以使用谷歌的开源库GSON,另外,一些第三方的开源库如Jackson,FastJSON等也非常不错。接下来主要学习前两种解析方式的用法。JSONObjectjson数据:[{"id":"5", "version":"2.1", "name":"c book"}, {"id":&原创 2018-03-05 17:13:43 · 2478 阅读 · 1 评论 -
通用网络请求实现之HttpURLConnection和OkHttp
网络请求是一个耗时操作,所以我们需要开启一个子线程来发起网络请求,同时,由于耗时逻辑都是在子线程里进行的,那么服务器响应的数据就无法返回,这时我们应该考虑使用Java的回调机制。public interface HttpCallbackListener{ void onFinish(String response); void onError(Exception e);}...原创 2018-03-05 18:56:55 · 3610 阅读 · 0 评论 -
活动(Activity)和服务(Service)进行通信模板
比如现在想在MyService里提供一个下载功能,然后在活动中可以决定何时开始下载,以及随时查看下载进度。实现这个功能的思路是创建一个专门的Binder对象来对下载功能进行管理。代码如下所示:public class MyService extends Service{ private DownloadBinder mBinder = new DownloadBinder...原创 2018-03-06 16:01:20 · 1026 阅读 · 0 评论 -
前台服务
服务几乎都是在后台运行的,但由于其系统优先级比较低,当系统出现内存不足的情况下,就有可能回收掉正在后台运行的服务。如果希望服务一直保持运行状态,可以考虑使用前台服务。 前台服务跟后台服务最大的区别在于,它会一直有一个正在运行的图标在系统的状态栏显示,下拉状态状态栏后可以看到更加详细的信息,非常类似通知的效果。public class MyService extends Serv...原创 2018-03-06 16:50:44 · 243 阅读 · 0 评论 -
启动模式之singleTask和singleInstance之间的关联
不同于其它3种启动模式,指定为singleInstance模式的活动会启用一个新的返回栈来管理这个活动,其实如果singleTask模式指定了不同的taskAffinity,也会启动一个新的返回栈。附:如何解决活动实例共享? 每个应用程序都会有自己的返回栈,同一个活动在不同的返回栈中入栈时必然是创建了新的实例,而在singleInstance模式下会有一个单独的返回栈来管理这个活动,不管...原创 2018-02-22 17:19:58 · 750 阅读 · 0 评论 -
内容提供器(ContentProvider)的安全性
内容提供器是如何做到保证隐私数据不会泄露出去的? 因为内容提供器的良好机制,所有的CRUD操作都一定要匹配到相应的内容URI格式才能进行,而我们当然不可能向UriMatcher中添加隐私数据的URI,所以这部分数据根本无法被外部程序访问到,安全问题也就不存在了。...原创 2018-03-01 12:52:10 · 940 阅读 · 0 评论 -
ListView滑动性能优化三步曲
我们将问题定位在ListView的适配器中的getView(int position, View convertView, ViewGroup parent)中: 1. 最初的写法即加载子项布局View,获取View中的控件实例,对各控件实例进行赋值,最后再返回这个View。这样的写法每次都会重复加载布局,运行效率最低。 2. 仔细观察会发现,getView()方法中有一个conv...原创 2018-02-26 10:46:43 · 241 阅读 · 0 评论 -
RecyclerView由来及使用模板
为什么要使用RecyclerView ListView由于其强大的功能,直到今天仍有不计其数的程序在使用ListView。但是ListView也有自身的缺陷。比如:如果不使用一些技巧来提升它的运行效率,那么它的运行效率会非常差;ListView的扩展性也不够好,目前只能实现纵向滚动的效果,如果我们有横向滚动的需求,那么ListView就无法实现了。 为此,官方推荐使用一个功能更加强大...原创 2018-02-26 17:52:40 · 206 阅读 · 0 评论 -
活动与碎片之间以及碎片与碎片之间进行通信
活动->碎片DetailFragment fragment = (DetailFragment)getFragmentManager().findFragmentById(R.id.detail_fragment);碎片->活动MainActivity activity = (MainActivity)getActivity();碎片->碎片思路:...原创 2018-02-27 01:43:57 · 710 阅读 · 0 评论 -
碎片(Fragment)的状态与附加回调
跟活动一样,碎片在其生命周期内也会经历运行状态,暂停状态,停止状态以及销毁状态这四种状态,下面将分别进行说明。运行状态: 碎片可见并且它所关联的活动正处于运行状态时。暂停状态: 当一个活动进入暂停状态即由于另一个未占满屏幕的活动被添加到栈顶时,与它相关联的可见碎片就会进入暂停状态。停止状态: 当一个活动进入停止状态时,与它相关联的碎片就会进入停止状态。或者通过调用Fra...原创 2018-02-27 02:22:12 · 441 阅读 · 0 评论 -
android5.0及以上版本特性
android5.0 使用ART运行环境替代了Dalvik虚拟机,大大提升了应用的运行速度,还提出Material Design的概念来优化应用的界面设计。除此之外,还推出Android Wear,Android Auto,Android TV系统,从而进军可穿戴设备,汽车,电视等全新领域。android6.0 加入运行时权限功能android7.0 加入多窗口模式功能...原创 2018-02-12 18:31:18 · 433 阅读 · 0 评论 -
Android Studio快速补全日志及生成TAG
在方法外即定义变(常)量的地方,输入logt,然后按下Tab键,这时就会以当前的类名作为值自动生成一个TAG常量。在方法中输入logd,然后按下Tab键,就会自动补全一条debug级别的日志,其它级别以此类推。...原创 2018-02-13 05:24:07 · 6188 阅读 · 0 评论 -
让一份程序同时适应手机和平板,动态加载布局的技巧
由于平板电脑的屏幕足够大,我们会发现很多应该采用了双页模式即程序在左侧面板上显示一个包含子项的列表,右侧面板显示内容,而手机屏幕一次只能显示一页内容,因此两个页面需要分开显示。 为了让碎片发挥更大的空间,我们可以考虑如何才能让程序根据设备的屏幕大小和分辨率在运行的时候动态加载哪个布局,那就是使用限定符。 比如: 单页模式:res/layout/activity_main,xm...原创 2018-02-27 10:49:01 · 819 阅读 · 0 评论 -
本地广播
首先,我们都知道广播是一种跨进程的通信方式,这一点从应用程序可以接收系统广播就可以看出来。 其次,我们通常发送和接收的广播全部属于系统全局广播,即本程序发出的广播可以被其它任何应用程序接收到,并且本程序也可以接收到来自其它任何应用程序发送的广播。这样很容易引起安全问题,比如说我们发送的携带关键性数据的广播可能会被其它应用程序截获,或者其它的应用程序可能会不停向我们的广播接收器发送垃圾广播...原创 2018-02-27 16:38:17 · 438 阅读 · 0 评论 -
瞬时数据,android中的数据持久化及方式
瞬时数据:指那些存储在内存当中,有可能会因为程序关闭或其它原因导致内存被回收而丢失的数据。 数据持久化就是指将那些内存中的瞬时数据保存到存储设备中,保证即使手机或电脑关机的情况下,这些数据仍然不会丢失。 保存在内存中的数据是处于瞬时状态的,而保存在存储设备中的数据是处于持久状态的,持久化技术则提供了一种机制可以让数据在瞬时状态和持久状态之间进行转换。 Android系统中主要...原创 2018-02-28 11:32:39 · 566 阅读 · 0 评论 -
android创建数据库,表整体流程
实例化SQLiteOpenHelper,调用getWritableDatabase() 或 getReadableDatabase(),当检测到当前程序中还没有创建指定的数据库时,于是会创建数据库并调用SQLiteOpenHelper实例中的onCreate()方法,这个方法中,我们通常会使用SQLiteDatabase调用execSQL来创建数据库表,此时,数据库和表就都创建好了。当检测到要...原创 2018-02-28 16:06:48 · 1442 阅读 · 0 评论 -
程序运行时申请权限
大家都知道,Android6.0系统的新特性是运行时权限,为简单起见,下面以CALL_PHONE这个权限为例来示例如何使用。 CALL_PHONE这个权限是编写拨打电话的功能是需要声明的,因为拨打电话会涉及用户手机的资费问题,因而被列为危险权限。 首先,在清单文件AndroidManifest.xml中添加以下权限声明:<uses-permission android:n...原创 2018-03-01 03:58:41 · 419 阅读 · 0 评论 -
仿微信语音对话实现
要实现下面的布局(先思考下如何实现,看似简单,或许会有所收获) <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <com.example.weixinrecorder.view.AudioReco...原创 2018-03-09 09:31:54 · 1096 阅读 · 0 评论 -
IntentService——异步的,会自动停止的服务
服务默认运行在主线程当中,如果要处理耗时操作,就必须开启子线程进行相关逻辑处理。同时,由于服务一旦启动,就会一直处于运行状态,必须调用stopService()或stopSelf()方法才能让服务停止。所以要实现让一个服务在执行完毕后自动停止的功能,在onStartCommand()方法中可以这样写: new Thread(new Runnable() { ...原创 2018-03-06 17:43:51 · 2365 阅读 · 0 评论