精华内容
下载资源
问答
  • Android 层级结构梳理

    2021-02-20 10:55:43
    Android系统的层级结构 APPLICATION APPLICATION FRAMEWORK AndroidRuntimeLibraries LinuxKernel Framework简介 常规服务的简单介绍 核心服务介绍 1:ActivityManagerService 2:WindowManagerService ...

    目录

    初识Android 系统

    Android系统的层级结构

    APPLICATION 

    APPLICATION FRAMEWORK  

    Android Runtime   Libraries 

    Linux Kernel

    Framework简介

    常规服务的简单介绍

    核心服务介绍

    1:ActivityManagerService

    2:WindowManagerService


    初识Android 系统

       Android其本质就是在标准的Linux系统上增加了Java虚拟机Dalvik,并在Dalvik虚拟机上搭建了一个JAVA的application framework,所有的应用程序都是基于JAVA的application framework之上。Android主要应用于ARM平台,但不仅限于ARM,通过编译控制,在X86、MAC等体系结构的机器上同样可以运行。

     

    Android系统的层级结构

     

    APPLICATION 

          主要为系统中的应用,如桌面,闹铃,设置,日历,电话,短信等系统应用。

     

    APPLICATION FRAMEWORK  

     

    Android的应用程序框架为应用程序层的开发者提供APIs,它实际上是一个应用程序的框架。由于上层的应用程序是以JAVA构建的,因此本层次提供了以下服务:

    1. 丰富而又可扩展的视图(Views),可以用来构建应用程序, 它包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons), 甚至可嵌入的web浏览器;
    2. 内容提供器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据;
    3. 资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串,图形,和布局文件( layout files );
    4. 通知管理器 (Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息;
    5. 活动管理器( Activity Manager) 用来管理应用程序生命周期并提供常用的导航回退功能。

     

    Android Runtime   Libraries 

    1.   Android 包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik被设计成一个设备可以同时高效地运行多个虚拟系统。 Dalvik虚拟机执行(.dex)的Dalvik可执行文件,该格式文件针对小内存使用做了优化。同时虚拟机是基于寄存器的,所有的类都经由JAVA编译器编译,然后通过SDK中 的 “dx” 工具转化成.dex格式由虚拟机执行。Dalvik虚拟机依赖于linux内核的一些功能,比如线程机制和底层内存管理机制。
    2. Android 包含一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过 Android 应用程序框架为开发者提供服务

    Linux Kernel

         Android 的核心系统服务依赖于 Linux 内核,如安全性,内存管理,进程管理, 网络协议栈和驱动模型。 Linux 内核也同时作为硬件和软件栈之间的抽象层。

     

    Framework简介

    常规服务的简单介绍

     SystemServer 是framework中非常重要的一个进程,它是在虚拟机启动后运行的第一个java进程,SystemServer启动其他系统服务,这些系统服务都是以一个线程的方式存在于SystemServer进程中。 

    1. EntropyService 提供伪随机数
    2. PowerManagerService 电源管理服务
    3. ActivityManagerService 最核心的服务之一,管理Activity
    4. TelephonyRegistry 通过该服务注册电话模块的事件响应,比如重启、关闭、启动等
    5. PackageManagerService 程序包管理服务
    6. AccountManagerService 账户管理服务,是指联系人账户,而不是Linux系统的账户 
    7. ContentService ContentProvider服务,提供跨进程数据交换
    8.  BatteryService 电池管理服务
    9. LightsService 自然光强度感应传感器服务
    10.  VibratorService 震动器服务 
    11. AlarmManagerService 定时器管理服务,提供定时提醒服务
    12.  WindowManagerService Framework最核心的服务之一,负责窗口管理
    13.  BluetoothService 蓝牙服务
    14. DevicePolicyManagerService 提供一些系统级别的设置及属性
    15.  StatusBarManagerService 状态栏管理服务
    16. ClipboardService 系统剪切板服务
    17.  InputMethodManagerService 输入法管理服务
    18.  NetStatService 网络状态服务
    19. NetworkManagementService 网络管理服务
    20. ConnectivityService 网络连接管理服务
    21. AccessibilityManagerService 辅助管理程序截获所有的用户输入,并根据这些输入给用户一些额外的反馈,起到辅助的效果
    22.  MountService 挂载服务,可通过该服务调用Linux层面的mount程序
    23. NotificationManagerService 通知栏管理服务,Android中的通知栏和状态栏在一起,只是界面上前者在左边,后者在右边
    24.  DeviceStorageMonitorService 磁盘空间状态检测服务
    25.  LocationManagerService 地理位置服务
    26.  SearchManagerService 搜索管理服务
    27.  DropBoxManagerService 通过该服务访问Linux层面的Dropbox程序
    28.  WallpaperManagerService 墙纸管理服务,墙纸不等同于桌面背景,在View系统内部,墙纸可以作为任何窗口的背景 
    29. AudioService 音频管理服务
    30. BackupManagerService 系统备份服务
    31. AppWidgetService         Widget服务
    32.  RecognitionManagerService 身份识别服务
    33.  DiskStatsService 磁盘统计服务

     

    核心服务介绍

    1:ActivityManagerService

            ActivityManagerService(以下简称:AMS)是android系统的一个系统服务,是应用进程的管理服务端,直接的控制了应用程序的各个行为,保证了系统中不同的应用程序之间能够和谐的合理的进行调度运行。

    AMS是android上层系统最核心的模块之一,其主要的工作是对所有的应用进程及其进程中的四大组件进行管理。(当然这里面也涉及了一些window、电源、权限等内容)

    对进程的管理包括:进程的创建与销毁、进程的优先级调整。对组件的管理包括:Activity的调度管理、Service的管理、Broadcast的分发、以及ContentProvider管理。

     

     

    2:WindowManagerService

       对系统中所有窗口进行管理;动画处理 ;Input分发、处理;Display管理(多屏显示) 。

     

     

     

     

     

     

     

    展开全文
  • (1)对于xml编写界面较复杂的情况下,使用include会使得编写和查看更清楚android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical">这里health_info1到health_...

    (1)对于xml编写界面较复杂的情况下,使用include会使得编写和查看更清楚

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical"

    >

    这里health_info1到health_info5是5个布局文件,相应于界面中的5个模块,每一个模块单独200行左右,假设在单独的模块中,不论是改动还是查看都比較easy,假设不适用include,整个布局文件就是1000行左右。无论是改动还是查看都比較麻烦,类似于代码中函数的调用。

    CheckBox  hiCbPs1;

    hiCbPs1=(CheckBox)findViewById(R.id.hi1).findViewById(R.id.hicbps1);

    这是代码中的使用方法

    (2)自己定义view的使用。在开发产品时,有时候会碰到一些须要自己进行绘制的view增加到界面中

    加入到到xml中的使用方法

    android:id="@+id/healthstatedial"

    android:layout_width="fill_parent"

    android:layout_height="200dip"

    android:layout_margin="5dip"

    android:layout_gravity="center"

    android:scaleType="centerInside"

    />

    com.jxj.view  是包名   BigDialView是自己定义的类名   com.jxj.view.BigDialView是完整的路径

    这里常常easy出错的问题就是xml中找不到该类,原因通常是未定义这个类,还是就是包名或类名写错导致xml找不到

    (3)这个是在LoonAndroid框架中看到的。认为挺好用

    基本全部的控件都会用到这两条语句

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    在LoonAndroid框架中看到了这样的使用方法比較简单,用一条语句替换了

    android:id="@+id/top_head"

    style="@style/w_full_h_wrap"

    android:background="@drawable/head_back"

    android:orientation="horizontal" >

    等同于

    android:id="@+id/top_head"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:background="@drawable/head_back"

    android:orientation="horizontal" >

    想要使用这样的方法。仅仅需在values文件夹下加入

    themes_basic.xml

    fill_parent

    fill_parent

    wrap_content

    fill_parent

    fill_parent

    wrap_content

    wrap_content

    wrap_content

    展开全文
  • 第一步就是创建我们要跳转...import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; public class

    第一步就是创建我们要跳转的activity:
    在这里插入图片描述
    这里的话是它的父Activity的布局文件加代码:
    在这里插入图片描述

    package com.example.handle;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    
    public class ActionBar_ceng extends AppCompatActivity {
        private Button in;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_action_bar_ceng);
    
    
            in = (Button) findViewById(R.id.in);
            // 在我们的这个位置的话设置我们的点击跳转事件
            in.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    // 然后的话就是设置我们的单击响应事件
                    Intent intent = new Intent(ActionBar_ceng.this,FriendActivity.class);
                    startActivity(intent);
                }
            });
    
        }
    }
    

    然后的话是它的父文件的java代码:
    在这里插入图片描述

    package com.example.handle;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    
    public class ActionBar_ceng extends AppCompatActivity {
        private Button in;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_action_bar_ceng);
    
    
            in = (Button) findViewById(R.id.in);
            // 在我们的这个位置的话设置我们的点击跳转事件
            in.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    // 然后的话就是设置我们的单击响应事件
                    Intent intent = new Intent(ActionBar_ceng.this,FriendActivity.class);
                    startActivity(intent);
                }
            });
    
        }
    }
    

    然后的话就是子布局的java代码:
    在这里插入图片描述

    package com.example.handle;
    
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.core.app.NavUtils;
    
    import android.os.Bundle;
    
    public class FriendActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_friend);
            // 在我们的这个位置的话编写我们的代码
            if(NavUtils.getParentActivityName(FriendActivity.this) != null){
                // 设置我们的导航图标显示
                getSupportActionBar().setDisplayHomeAsUpEnabled(true); // 显示向左的导航图标
    
            }
        }
    }
    

    然后的话还要修改我们的android的mainfest文件:设置它的父界面
    在这里插入图片描述
    运行程序:
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 一、问题 video标签在安卓自带浏览器下会默认处于最高层级,由于不是x5内核,所以不能采取x5-video-player-type等方法。

     

    一、问题

      video标签在安卓自带浏览器下会默认处于最高层级。且会自动fixed在页面上方,loop属性失效

      通常如果需要video自动播放,我们会这样写:

    <video
        style={{ width: '100%', height: '100%',objectFit:'fill' }}
        loop
        autoPlay
        muted
        ref={this.videoRef}
        webkit-playsinline="true"
        x-webkit-airplay="true"
        playsinline="true"
        x5-video-player-type="h5-page"
        x5-video-player-fullscreen="false">
        <source src={'video.mp4'} />
    </video>

      x5属性只针对腾讯系的浏览器,但是由于安卓自带浏览器不是x5内核,所以自然无效。且不支持zIndex的写法。

    二、解决

       将video转化 为canvas

      2.1 安装   

    npm i jsmpeg
    brew install ffmpeg

     ffmpeg为视频流格式转换插件。 jsmpeg只支持mpg格式的视频。所以需要将对应的视频转换成mpg格式。命令行输入:

    ffmpeg -i video.mp4 -f mpeg1video -vf "crop=iw-mod(iw\,2):ih-mod(ih\,2)" -b 0 video.mpg

    即可在当前转换文件的目录下生成指定格式的视频。

    2.2 引入 

    <canvas id="launchpad-h5" style={{height: '220px', width: '100%'}}/>
    let launchpadH5 = document.getElementById('launchpad-h5')
      if(launchpadH5){
        let player = new jsmpeg('video.mpg', {
          canvas: document.getElementById('launchpad-h5'),
          video: true,
          loop: true,
          autoplay: true,
        });
        player.play();
      }

    建议只在h5上使用这个方法并控制视频大小,因为比较耗费性能,视频如果过大画布绘图速度会很慢。

    展开全文
  • 层级折叠,无限层级实现
  • Android与用户的UI交互主要是以activity为载体,activity提供一个窗口展示UI。平常我们一般是通过activity中的setContentView()方法去设置展示内容,但activity并不只有这一层,其实有多层附着在窗口上。层级图如下:...
  • 定制 Android Window 层级

    2021-03-31 10:50:26
    如何看 Android Window 层级的高低: Window 类型很多:应用程序窗口、系统错误窗口、输入法窗口、PopupWindow、Toast、Dialog 总体分三大类: 应用程序窗口 Application Window、 子窗口 Sub Window、 系统窗口 ...
  • // 最近遇到微信端的这个问题,非常让人头疼,正好有小伙伴和我聊到面试经验,灵机一动,《大事记》由此而生问题描述:在安卓系统的微信浏览器里面, 标签触发了 play() 事件,即开始播放之后 标签的层级会变成 MAX ...
  • 浮窗开发之窗口层级

    2021-06-04 05:11:03
    浮窗效果很多人都知道如何去实现一个简单的浮窗,但是却很少有人去深入的研究背后的流程机制,由于项目中浮窗交互比较复杂,遇到了些坑查看了很多资料,故总结浮窗涉及到的知识点:窗口层级关系(浮窗是如何“浮”的)...
  • 一. Window 分类 应用 Window(ApplicationWindow: 对应一个 Acitivity) 子 Window (SubWindow:不能单独存在,需要依附在特定的父 Window 中,... Window层级 Window 是分层的,每个 Window 都有对应的 z...
  • 前提: 做Android 开发这段时间以来,对于自定义View也就属于半瓶子醋--乱晃荡的状态。说不会做吧,也能摸索着把View做...在开始学习自定义View之前,先了解一下Android 中的View层级关系,我们知道在Android 中的...
  • 问题:我们有时候希望动态的在android的布局中增加view,例如动态增加一个textview来显示数据为空,但是当布局较为复杂时,你希望把view加载特定的其他view的后面,这是要如何处理呢?答案:先看一个布局片段:Xml...
  • 效果:(菜单中间的那个图标比较大,需要凸显出来)设置菜单层级和样式mui.init({subpages:[{url:'nav.html',id:'nav.html',styles:{zindex:"90",width:"100%",height:"70px",bottom:"0px",//默认为0px,可不定义;...
  • 转载请标明出处(http://blog.csdn.net/kifile),再次感谢在接下来的一段时间里,我会每天翻译一部分关于性能提升的Android官方文档给大家性能优化之布局篇:题外话:复杂的布局,既会提高我们的设计难度,也会降低我们...
  • 最近在做Flutter开发,碰到产品提的新的需求,类似于京东的地址选择器,但是baidu了一堆,都只是定死层级的实现效果。不符合产品需求啊。自己码一个,记录一下。(可以根据需要,封装成通用工具)写的不好,请大佬轻喷...
  • 程序的每个组件和 Layout 都需要经过初始化、布局和绘制...HierarchyViewer该工具位于Android SDK tools中,使用HierarchyViewer可以分析正在运行app的布局,从而打破影响布局性能的瓶颈。HierachyViewer通过选择运...
  • Android Studio 4.0带有更新的布局检查器,可让您以类似于Chrome开发者工具的方式调试Android应用程序UI(用户界面)。布局检查器可与您的设备或Android仿真器一起使用,并显示当前视图层次。这有助于查明问题并发现...
  • Android与用户的UI交互主要是以activity为载体,activity提供一个窗口展示UI。平常我们一般是通过activity中的setContentView()方法去设置展示内容,但activity并不只有这一层,其实有多层附着在窗口上。层级图如下:...
  • HierarchyLayout 介绍HierarchyLayout是一个自定义的ViewGroup工具,用于分析视图的层级关系,并画出层级树的结构图和可交互的3D 层级View:HiearchyLayout的静态图,实际是可随手势改变 3D 形态的。hierarchyView....
  • dialog层级关系

    2021-03-16 15:02:21
    android 屏幕中控件之间的位置关系 上下左右,前后关系. 是有层级概念的 dialog 展示也是有优先级的 如 toast ,展示时是不会被覆盖的,永远在其他空间前面 activity永远都是在dialog后面,被dialog覆盖 优先级越高,展示...
  • 有没有一种简单的方法可以在Android视图的顶部和底部添加边框?我有一个TextView,我想沿其顶部和底部边框添加黑色边框。 我尝试将android:drawableTop和android:drawableBottom添加到TextView,但这只会导致整个...
  • 转载自:http://www.liuguangli.win/archives/category/uncategorized/android最近在项目中遇到了这样的需求:需要在特定的其他应用之上悬浮自己的UI交互(拖动、输入等复杂的UI交互),和九游的浮窗类似,不过我们的比...
  • 层级导航示例层级导航案例1、收下准备两个Activity的布局文件activity_main.xmlxmlns:app=...android:layout_hei...
  • 这次是在上一篇的基础上增加的,所以导包这些啥的就跳过了研究了一下...最后的代码:XML布局文件:android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical">...
  • Android 布局优化

    2021-06-03 00:56:06
    在布局复杂或者层级过深的时候,使用 RelativeLayout 代替 LinearLayout 使界面层级扁平化,降低层级 通过使用 include merge 复用布局,减少布局层次 排查background,减少不必的背景色设置,减少过度绘制 移除...
  • 实际上,可以在另一个内部显示多个对话框碎片. z顺序取决于它们的创建顺序.在下面的代码中,有一个FragmentActivity示例,其中包含您需要的行为.public class MyActivity extends FragmentActivity {@Overridepublic ...
  • Prior * to {@link android.os.Build.VERSION_CODES#KITKAT} this * method should be followed by calls to {@link #requestLayout()} and * {@link View#invalidate()} on the view's parent to force the parent...
  • 一、目的我想把包名(四级结构):me.jessyan.armscomponent.app,如下图: 改为:包名(三级结构):com.rsaif.zwtcontacts,如下图: 说明:我用的android studio版本为3.1.4,如下图: 二、操作步骤1.切换项目的浏览...
  • Android实现多层级Spinner列表选项实时更新树形层级运行结果如图: Java代码:package com.example.spinnerdemo;import android.os.Bundle;import android.app.Activity;import android.view.View;import android....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 38,709
精华内容 15,483
关键字:

安卓层级