`
mmdev
  • 浏览: 13219104 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

Android的suiface类源码深度剖析

 
阅读更多

surface用来处理一段单独的缓冲区,这段缓冲区是由屏幕合成器来管理的。

surface 包含安全的内容,使用一些特殊的措施来阻止在其他的进程中复制surface内容。尤其是截屏和VNC服务。surface不能被硬件加速。它创建的缓冲区有几种:BUFFERS,NORMAL,BLUR,DIM。

当surface不能被创建或更改大小时候,系统会抛出异常。surface创建过程中,创建了一个画布,并且在之后的程序设计中我们可以使用。我们可以锁定或解锁一个surface,但解锁时,只有调用post()或postAll() 是才会更新屏幕。

源码:


package android.view;

import android.graphics.*;
import android.os.Parcelable;
import android.os.Parcel;
import android.util.Log;


public class Surface implements Parcelable {
private static final String LOG_TAG = "Surface";


public static final int HIDDEN = 0x00000004;

public static final int HARDWARE = 0x00000010;

public static final int GPU = 0x00000028;

public static final int SECURE = 0x00000080;


public static final int NON_PREMULTIPLIED = 0x00000100;


public static final int PUSH_BUFFERS = 0x00000200;


public static final int FX_SURFACE_NORMAL = 0x00000000;


public static final int FX_SURFACE_BLUR = 0x00010000;


public static final int FX_SURFACE_DIM = 0x00020000;


public static final int FX_SURFACE_MASK = 0x000F0000;




public static final int SURFACE_HIDDEN = 0x01;


public static final int SURACE_FROZEN = 0x02;

public static final int SURFACE_DITHER = 0x04;

public static final int SURFACE_BLUR_FREEZE= 0x10;


public static final int ROTATION_0 = 0;
public static final int ROTATION_90 = 1;
public static final int ROTATION_180 = 2;
public static final int ROTATION_270 = 3;


public static final int FLAGS_ORIENTATION_ANIMATION_DISABLE = 0x000000001;

@SuppressWarnings("unused")
private int mSurface;
@SuppressWarnings("unused")
private int mSaveCount;
@SuppressWarnings("unused")
private Canvas mCanvas;

/**
* Exception thrown when a surface couldn't be created or resized
*/
public static class OutOfResourcesException extends Exception {
public OutOfResourcesException() {
}
public OutOfResourcesException(String name) {
super(name);
}
}


native private static void nativeClassInit();
static { nativeClassInit(); }


public Surface(SurfaceSession s,
int pid, int display, int w, int h, int format, int flags)
throws OutOfResourcesException {
mCanvas = new Canvas();
init(s,pid,display,w,h,format,flags);
}


public Surface() {
mCanvas = new Canvas();
}

public native void copyFrom(Surface o);


public native boolean isValid();

public native void clear();

public Canvas lockCanvas(Rect dirty) throws OutOfResourcesException {

return lockCanvasNative(dirty);
}

private native Canvas lockCanvasNative(Rect dirty);


public native void unlockCanvasAndPost(Canvas canvas);


public native void unlockCanvas(Canvas canvas);

public static native void openTransaction();

public static native void closeTransaction();



public static native void freezeDisplay(int display);


public static native void unfreezeDisplay(int display);

public static native void setOrientation(int display, int orientation, int flags);

public static void setOrientation(int display, int orientation) {
setOrientation(display, orientation, 0);
}


public native void setLayer(int zorder);
public native void setPosition(int x, int y);
public native void setSize(int w, int h);

public native void hide();
public native void show();
public native void setTransparentRegionHint(Region region);
public native void setAlpha(float alpha);
public native void setMatrix(float dsdx, float dtdx,
float dsdy, float dtdy);

public native void freeze();
public native void unfreeze();

public native void setFreezeTint(int tint);

public native void setFlags(int flags, int mask);

@Override
public String toString() {
return "Surface(native-token=" + mSurface + ")";
}

private Surface(Parcel source) throws OutOfResourcesException {
init(source);
}

public int describeContents() {
return 0;
}

public native void readFromParcel(Parcel source);
public native void writeToParcel(Parcel dest, int flags);

public static final Parcelable.Creator<Surface> CREATOR
= new Parcelable.Creator<Surface>()
{
public Surface createFromParcel(Parcel source) {
try {
return new Surface(source);
} catch (Exception e) {
Log.e(LOG_TAG, "Exception creating surface from parcel", e);
}
return null;
}

public Surface[] newArray(int size) {
return new Surface[size];
}
};

/* no user serviceable parts here ... */
@Override
protected void finalize() throws Throwable {
clear();
}

private native void init(SurfaceSession s,
int pid, int display, int w, int h, int format, int flags)
throws OutOfResourcesException;

private native void init(Parcel source);
}

分享到:
评论

相关推荐

    libevent源码深度剖析pdf

    为方便阅读,把blog上的libevent源码深度剖析系列文章整合成一个pdf。

    libevent源码深度剖析 + libevent参考手册(中文版)

    libevent库,文字版,很清晰,附带libevent参考手册(中文版) libevent源码深度剖析,根据libevent开源代码框架进行剖析,很不错值得学习借鉴,还有libevent中C语言的功底值得学习揣摩!

    libevent源码深度剖析

    libevent源码深度剖析

    libevent参考手册(中文版)+libevent源码深度剖析

    《libevent参考手册(中文版)》和《libevent源码深度剖析》是两本针对libevent库的重要参考资料。libevent是一个开源的事件通知库,它使得开发者能够编写高性能、可扩展的网络服务器或者客户端应用。这个库的核心...

    Android应用源码45套安卓源码合集.zip

    Android应用源码Android平台下通过HTTP协议实现断点续传下载.rar Android应用源码Hibernate4Android.rar Android应用源码http、udp、tcp网络交互组件.rar Android应用源码ListView实现的目录树结构.rar Android应用...

    互联网轻量级SSM框架解密:Spring、Spring MVC、MyBatis源码深度剖析 .rar

    总的来说,SSM框架的源码深度剖析是一项有价值的学习任务,它将使开发者具备更高的技术水平,能够驾驭复杂的系统开发,提升项目质量。提供的"互联网轻量级SSM框架解密:Spring、Spring MVC、MyBatis源码深度剖析.pdf...

    Android应用源码11套安卓源码合集.zip

    Android应用源码11套安卓源码合集: Android Gps日志记录程序源码.rar Android listview 滑动删除(具体效果360手机卫士后台通知).rar Android MP3播放器,带卡拉OK字幕.rar Android “遇见”android应用源码.rar ...

    互联网轻量级SSM框架解密:Spring、Spring MVC、MyBatis源码深度剖析

    《互联网轻量级SSM框架解密:Spring、Spring MVC、MyBatis源码深度剖析》以SSM 的核心代码剖析为基础,突破Java Web 研发瓶颈的束缚,选取Spring、SpringMVC 和MyBatis 框架中易于理解的版本,深入剖析了其中各个...

    50款Android studio项目源码.zip

    接下来,我们逐一剖析这些项目源码: 1. **基础UI设计**:项目中包含了各种用户界面(UI)的设计,如Activity、Fragment、布局管理器(LinearLayout、RelativeLayout、ConstraintLayout等)。初学者可以通过这些...

    Python源码剖析.pdf

    话不多说,pdf可以下载的很多,但是有目录的能有几个?? 本人亲自整理的pdf目录

    android 背单词app源码(高分项目).zip

    android 背单词app源码(高分项目).zipandroid 背单词app源码(高分项目).zipandroid 背单词app源码(高分项目).zipandroid 背单词app源码(高分项目).zipandroid 背单词app源码(高分项目).zipandroid 背单词...

    Android应用源码安卓源码(172个合集).zip

    Android应用源码安卓源码(172个合集),可以做为你的学习参考。 365MobileSecretary v1.0.6(365手机助手AIDL) 888个经典 Logo.rar AdXmpp(Openfire+asmack+spark) .zip AidlDemo(简单aidl的例子) aidl跨进程调用....

    Android新闻客户端源码

    一、源码特点 1、运行时如果没有内容,请将文件内的服务端JSON文件放置服务器。代码GlobalContants类中封装了服务器的地址,请根据自己的服务器网站,自行更改 二、注意事项 1、开发环境:Android Studio 1.4 运行...

    Spark2.2版本内核源码深度剖析.zip

    《Spark2.2内核源码深度剖析》 Spark,作为大数据处理领域的明星框架,以其高效、易用的特性赢得了广大开发者的喜爱。Spark2.2版本更是对性能进行了优化,引入了诸多新特性和改进。本文将通过对Spark2.2内核源码的...

    安卓期末大作业Android天气预报app源码.zip

    安卓期末大作业Android天气预报app源码安卓期末大作业Android天气预报app源码安卓期末大作业Android天气预报app源码安卓期末大作业Android天气预报app源码安卓期末大作业Android天气预报app源码安卓期末大作业...

    Android手机管家源码

    **Android手机管家源码解析** 本项目是一款基于Android平台的手机管理软件——“Android手机管家”的源码,它集成了四个主要功能:文件管理、应用管理、电话拦截以及文件加解密。这些功能覆盖了日常手机使用中的...

    黑马程序员——Android移动开发源码

    黑马程序员——Android移动开发源码

    android mqtt客户端源码,可以安装直接使用

    首先,源码中的关键组件可能包括`MqttAndroidClient`,这是Android MQTT客户端的核心类,负责连接到MQTT服务器、发布和订阅主题。这个类通常会配置连接参数,如服务器地址、端口、用户名和密码,以及连接选项,如...

Global site tag (gtag.js) - Google Analytics