自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(18)
  • 收藏
  • 关注

原创 The import android.support cannot be resolved

带有源码的应用预置在Android 7.0源码目录下,编译的 过程中报错: The import android.support cannot be resolved 定位在出错的语句: import android.support.v4.content.ContextCompat; 显然是这个导入包的语句异常,于是乎就在源码目录下查找这个类,发现居然存在,于是乎感觉特别头大,惯性怀疑是v4

2017-11-24 09:49:58 1713

原创 android6.0默认Home(Launcher3)的启动分析

Launcher是默认的桌面应用,在系统启动后开始启动Launcher,进而才加载桌面数据。那么如何实现开机进入默认Launcher,比如把自己写的应用设置成开机默认启动的桌面呢?带着这个问题来分析Launcher是如何被选中并成为默认桌面应用而启动的。SystemServer启动ActivityManagerService并调用了它的systemReady()函数。ActivityManagerS

2017-04-26 17:04:52 6126

原创 RecentsActivity启动分析二

接着上一篇RecentsActivity启动分析一继续分析RecentsActivity。先给大家看布局的结构图 简单的画了RecentsView部分,如下图所示 那接着就从RecentsActivity的构造方法开始分析@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInst

2017-04-11 15:07:22 2301 5

原创 Android6.0添加桌面插件Widget

分析了AppWidget源码,那么如何添加自己定义的组件呢?先把效果图附上一、步骤:1、设计组件UI:widget_music.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_wid

2017-04-05 13:53:15 3908

原创 Android6.0关机流程源码分析一

前段时间盆友问我怎么实现关机功能,于是我就开始捣鼓,第一个想法就是发送关机广播,然而遇到了些问题,一是获取不到关机权限,二是Intent.ACTION_REQUEST_SHUTDOWN和Intent.EXTRA_KEY_CONFIRM这两个属性不对上层开放。一条路行不通就换条走吧,既然没对上层提供shutdown()函数,那就用反射的方法来取,结果还是因为没有关机权限而无法调用shutdown()函

2017-03-27 15:10:50 2517

原创 WifiSettings源码分析一

wifi的入口Activity:WifiSettings.java进入wifi界面首先显示的是wifi关闭的页面(wifi默认关闭) 接着打开开关,开始扫面附近可用热点搜索到热点就以列表的形式显示出来,我们可对可用的wifi进行连接、保存、添加、删除等操作。那么这一系列的动作在代码中是如何体现出来的呢?看代码分析,。1、onCreate()@Overridepublic void onCre

2017-03-22 16:11:44 6633

原创 SystemUI源码分析四(QSPanel显示的流程)

quick settings是statusbar的一部分,随着statusbarview的创建而加载,上一篇SystemUI源码分析三中已经分析了statusbar的加载流程,那么这里将继续对其中的quick settings部分进行简单的分析,弄清楚它的加载显示流程。首先从PhoneStausBar.java中开始分析。protected PhoneStatusBarView makeStatus

2017-03-17 15:18:49 4775 1

原创 SystemUI源码分析三(StatusBar的加载流程)

SystemServer中调用startsystemui函数启动SystemUIService,在SystemUIService的onCreate()函数中:((SystemUIApplication) getApplication()).startServicesIfNeeded();SystemBar继承SystemUI,因此被启动了。onStart()public void start(){

2017-03-15 17:15:42 6053 2

原创 RecentsActivity的启动分析一

RecentsActivity是SystemUI用于显示最近使用的应用列表,当用户点击Switch按键时会启动RecentsActivity。先分析启动的过程。首先是用户点击SWITCH按键,PhoneWindowManager会在事件分发前先拦截该事件:public long interceptKeyBeforeDispatching(WindowState win, KeyEvent event

2017-03-11 10:43:42 4433

原创 SystemUI源码分析一(SystemUIService的启动)

SystemUI是系统应用,包括StatusBar(状态栏)、NavigationBar(导航栏),手机一开机就开始显示手机运行的状态并实时更新手机的一些运行状态。 1、先看Manifest.xml:Service:SystemUIService、TakeScreenshotService、KeyguardService、LoadAverageService、ImageWallpaper、Dess

2017-03-10 17:05:26 2462

原创 Launcher3源码分析(DeviceProfile)

DeviceProfile定义了Launcher的很多属性,比如图标的大小、间距等。在Luancher.java的onCreate方法中初始化//方向mDeviceProfile = getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE ? app.getInvariantDevic

2017-03-08 14:32:20 3859

原创 Launcher3源码分析(CellLayout)

CellLayout是workspace的屏幕。 CellLayout中的一些重要属性:int mCellWidth;int mCellHeight;//每一个屏幕的行列数int mCountX;//每一行的item个数int mCountY;//每一列的item个数//item之间的距离int mWidthGap;//item之间的宽度int mHeightGap;//item之间

2017-03-08 14:12:51 2122

原创 Launcher3源码分析(Workspace)

Workspace主要功能:完成多个屏幕的以及壁纸的显示,多个屏幕之间的切换和壁纸的添加。 /** * Used to inflate the Workspace from XML. */ public Workspace(Context context, AttributeSet attrs, int defStyle) { super(conte

2017-03-08 11:26:24 1929

原创 Launcher3源码分析(LauncherModel加载数据)

LauncherModel继承BroadcastReceiver,显然是一个广播接收者。在上一篇Launcher的启动中讲到桌面数据的加载工作是在LauncherModel中执行的,那么它是如何加载数据的呢?下面将分析Launcher和LauncherModel的通讯方式以及LauncherModel加载桌面数据的过程。首先分析的是Launcher和LauncherModel的通讯方式:(1)Lau

2017-03-08 10:46:31 2514

原创 Launcher.java源码分析

Launcher的简单分析:1、获取LauncherAppState实例:LauncherAppState app = LauncherAppState.getInstance();LauncherAppState这个类主要做了些什么呢?从这个类的构造方法中可以发现,做了些初始化的操作:(1)初始化LauncherModel、IconCache、WidgetCache、InvariantDevice

2017-03-07 15:05:20 2526

原创 RecyclerView的item左滑删除

让RecyclerView实现item的左滑删除功能,我把主要的思路放在了触摸事件上。根据手指滑动的方向决定触摸事件该由谁消费。1、首先是定义一个类继承RecyclerView,重写onTouchEvent方法。public class CustomRecyclerView extends RecyclerView { //itemView的第一个childView private

2017-03-02 16:41:45 2057 2

原创 RecyclerView的item点击事件

基于上一篇RecyclerView的基本用法,写一下它的item的点击事件的监听。1、首先定义了一个接口RecyclerViewCallbackpublic interface RecyclerViewCallback { public void onItemClick(View itemView,int position);}2、接着创建RecyclerViewTe

2017-02-27 15:00:14 807

原创 RecyclerView的基本用法

RecyclerView的基本用法public class MainActivity extends AppCompatActivity {    private RecyclerView recyclerView;    private ArrayList dataList;    @Override    protected void onCre

2017-02-25 16:56:20 430 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除