GVKun编程网logo

docker 删除镜像的时候报错 --image has dependent child images(docker删除镜像失败)

30

在本文中,我们将为您详细介绍docker删除镜像的时候报错--imagehasdependentchildimages的相关知识,并且为您解答关于docker删除镜像失败的疑问,此外,我们还会提供一些

在本文中,我们将为您详细介绍docker 删除镜像的时候报错 --image has dependent child images的相关知识,并且为您解答关于docker删除镜像失败的疑问,此外,我们还会提供一些关于25.week4 docker build 也就是创建自己的image 上传image到dockerhub 从dockerhub下载images、android – FragmentStatePagerAdapter with ChildFragmentManager – FragmentManagerImpl.getFragment导、com.facebook.imagepipeline.image.EncodedImage的实例源码、ConvenientImagePicker iOS 简洁优雅的 imagepicker的有用信息。

本文目录一览:

docker 删除镜像的时候报错 --image has dependent child images(docker删除镜像失败)

docker 删除镜像的时候报错 --image has dependent child images(docker删除镜像失败)

背景

偶然间发现服务器上有很多镜像占用不少空间,想清理一下。
结果直接进行删除报错:

docker rmi 8f5116cbc201

Error response from daemon: conflict: unable to delete 8f5116cbc201 (cannot be forced) - image has dependent child images

 

然后上网需求方法,主流的方法有两种

方法一:强制删除镜像

docker rmi -f 8f5116cbc201
Error response from daemon: conflict: unable to delete 8f5116cbc201 (cannot be forced) - image has dependent child images

 

以失败告终。。。

方法二:批量删除容器,再删除镜像

# 停止所有容器
docker ps -a | grep "Exited" | awk ''{print $1 }''|xargs docker stop

# 删除所有容器
docker ps -a | grep "Exited" | awk ''{print $1 }''|xargs docker rm

# 删除所有none镜像
docker images|grep none|awk ''{print $3 }''|xargs docker rmi

还是以失败告终。。。。。

原因


搜了很久,发现其实是因为 TAG 的问题,即有其他 image FROM 了这个 image,可以使用下面的命令列出所有在指定 image 之后创建的 image 的父 image

方案

先查询依赖

docker image inspect --format=''{{.RepoTags}} {{.Id}} {{.Parent}}'' $(docker image ls -q --filter since=XXX)    # XXX 指镜像 ID


然后根据根据 TAG 删除容器

docker rm REPOSITORY:TAG

 

 

补充

docker none 镜像

有效的 none 镜像
Docker 文件系统的组成,docker 镜像是由很多 layers 组成的,每个 layer 之间有父子关系,所有的 docker 文件系统层默认都存储在 /var/lib/docker/graph 目录下,docker 称之为图层数据库。

最后做一个总结 <none>:< none> 镜像是一种中间镜像,我们可以使用 docker images -a 来看到,他们不会造成硬盘空间占用的问题(因为这是镜像的父层,必须存在的),但是会给我们的判断带来迷惑。

无效的 none 镜像

另一种类型的 <none>:< none> 镜像是 dangling images ,这种类型会造成磁盘空间占用问题。

像 Java 和 Golang 这种编程语言都有一个内存区,这个内存区不会关联任何的代码。这些语言的垃圾回收系统优先回收这块区域的空间,将他返回给堆内存,所以这块内存区对于之后的内存分配是有用的

docker 的悬挂 (dangling) 文件系统与上面的原理类似,他是没有被使用到的并且不会关联任何镜像,因此我们需要一种机制去清理这些悬空镜像。

我们在上文已经提到了有效的 <none> 镜像,他们是一种中间层,那无效的 < none > 镜像又是怎么出现的?这些 dangling 镜像主要是我们触发 docker build 和 docker pull 命令产生的。

使用下面的命令可以清理
docker rmi $(docker images -f “dangling=true” -q)
docker 没有自动垃圾回收处理机制,未来可能会有这方面的改进,但是目前我们只能这样手动清理(写个脚本就好)。

25.week4 docker build 也就是创建自己的image 上传image到dockerhub 从dockerhub下载images

25.week4 docker build 也就是创建自己的image 上传image到dockerhub 从dockerhub下载images

dado可以写你自己的名字

这个命令就会根据目录下的Dockerfile(固定用和这个名字)文件里面的内容 去下载并创建运行命令一步一步地

Setting up libxfixes3:amd64 (1:5.0.1-2) ...
Setting up libxinerama1:amd64 (2:1.1.3-1) ...
Setting up libxshmfence1:amd64 (1.2-1) ...
Setting up libxtst6:amd64 (2:1.2.2-1) ...
Setting up libxxf86vm1:amd64 (1:1.1.4-1) ...
Setting up libjbig0:amd64 (2.1-3.1) ...
Setting up libtxc-dxtn-s2tc0:amd64 (0~git20131104-1.1) ...
update-alternatives: using /usr/lib/x86_64-linux-gnu/libtxc_dxtn_s2tc.so.0 to provide /usr/lib/x86_64-linux-gnu/libtxc_dxtn.so (libtxc-dxtn-x86_64-linux-gnu) in auto mode
Setting up libbsd0:amd64 (0.8.2-1) ...
Setting up libnettle6:amd64 (3.2-1ubuntu0.16.04.1) ...
Setting up libhogweed4:amd64 (3.2-1ubuntu0.16.04.1) ...
Setting up libidn11:amd64 (1.32-3ubuntu1.2) ...
Setting up libp11-kit0:amd64 (0.23.2-5~ubuntu16.04.1) ...
Setting up libtasn1-6:amd64 (4.7-3ubuntu0.16.04.3) ...
Setting up libgnutls30:amd64 (3.4.10-4ubuntu1.4) ...
Setting up libsqlite3-0:amd64 (3.11.0-1ubuntu1) ...
Setting up libssl1.0.0:amd64 (1.0.2g-1ubuntu4.13) ...
debconf: unable to initialize frontend: Dialog
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (Can''t locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.22.1 /usr/local/share/perl/5.22.1 /usr/lib/x86_64-linux-gnu/perl5/5.22 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.22 /usr/share/perl/5.22 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base .) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7.)
debconf: falling back to frontend: Teletype
Setting up openssl (1.0.2g-1ubuntu4.13) ...
Setting up ca-certificates (20170717~16.04.1) ...
debconf: unable to initialize frontend: Dialog
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (Can''t locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.22.1 /usr/local/share/perl/5.22.1 /usr/lib/x86_64-linux-gnu/perl5/5.22 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.22 /usr/share/perl/5.22 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base .) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7.)
debconf: falling back to frontend: Teletype
Setting up libcap-ng0:amd64 (0.7.7-1) ...
Setting up libdbus-1-3:amd64 (1.10.6-1ubuntu3.3) ...
Setting up dbus (1.10.6-1ubuntu3.3) ...
Setting up krb5-locales (1.13.2+dfsg-5ubuntu2) ...
Setting up libdrm-common (2.4.91-2~16.04.1) ...
Setting up libdrm2:amd64 (2.4.91-2~16.04.1) ...
Setting up libedit2:amd64 (3.1-20150325-1ubuntu2) ...
Setting up libelf1:amd64 (0.165-3ubuntu1.1) ...
Setting up libglib2.0-data (2.48.2-0ubuntu4) ...
Setting up libkrb5support0:amd64 (1.13.2+dfsg-5ubuntu2) ...
Setting up libk5crypto3:amd64 (1.13.2+dfsg-5ubuntu2) ...
Setting up libkeyutils1:amd64 (1.5.9-8ubuntu1) ...
Setting up libkrb5-3:amd64 (1.13.2+dfsg-5ubuntu2) ...
Setting up libgssapi-krb5-2:amd64 (1.13.2+dfsg-5ubuntu2) ...
Setting up libicu55:amd64 (55.1-7ubuntu0.4) ...
Setting up libxml2:amd64 (2.9.3+dfsg1-1ubuntu0.6) ...
Setting up shared-mime-info (1.5-2ubuntu0.2) ...
Setting up xdg-user-dirs (0.15-2ubuntu6.16.04.1) ...
Setting up xml-core (0.13+nmu2) ...
Setting up java-common (0.56ubuntu2) ...
Setting up libavahi-common-data:amd64 (0.6.32~rc+dfsg-1ubuntu2.2) ...
Setting up libavahi-common3:amd64 (0.6.32~rc+dfsg-1ubuntu2.2) ...
Setting up libavahi-client3:amd64 (0.6.32~rc+dfsg-1ubuntu2.2) ...
Setting up libcups2:amd64 (2.1.3-4ubuntu0.5) ...
Setting up libjpeg8:amd64 (8c-2ubuntu8) ...
Setting up libnspr4:amd64 (2:4.13.1-0ubuntu0.16.04.1) ...
Setting up libpcsclite1:amd64 (1.8.14-1ubuntu1.16.04.1) ...
Setting up libxi6:amd64 (2:1.7.6-1) ...
Setting up libxrender1:amd64 (1:0.9.9-0ubuntu1) ...
Setting up fonts-dejavu-extra (2.35-1) ...
Setting up hicolor-icon-theme (0.15-0ubuntu1.1) ...
Setting up libasound2-data (1.1.0-0ubuntu1) ...
Setting up libasound2:amd64 (1.1.0-0ubuntu1) ...
Setting up libatk1.0-data (2.18.0-1) ...
Setting up libatk1.0-0:amd64 (2.18.0-1) ...
Setting up libpixman-1-0:amd64 (0.33.6-1) ...
Setting up libxcb-render0:amd64 (1.11.1-1ubuntu1) ...
Setting up libxcb-shm0:amd64 (1.11.1-1ubuntu1) ...
Setting up libcairo2:amd64 (1.14.6-1) ...
Setting up libdatrie1:amd64 (0.2.10-2) ...
Setting up libdrm-amdgpu1:amd64 (2.4.91-2~16.04.1) ...
Setting up libpciaccess0:amd64 (0.13.4-1) ...
Setting up libdrm-intel1:amd64 (2.4.91-2~16.04.1) ...
Setting up libdrm-nouveau2:amd64 (2.4.91-2~16.04.1) ...
Setting up libdrm-radeon1:amd64 (2.4.91-2~16.04.1) ...
Setting up libflac8:amd64 (1.3.1-4) ...
Setting up libtiff5:amd64 (4.0.6-1ubuntu0.4) ...
Setting up libgdk-pixbuf2.0-common (2.32.2-1ubuntu1.5) ...
Setting up libgdk-pixbuf2.0-0:amd64 (2.32.2-1ubuntu1.5) ...
Setting up libgif7:amd64 (5.1.4-0.3~16.04) ...
Setting up libglapi-mesa:amd64 (18.0.5-0ubuntu0~16.04.1) ...
Setting up libllvm6.0:amd64 (1:6.0-1ubuntu2~16.04.1) ...
Setting up libsensors4:amd64 (1:3.4.0-2) ...
Setting up libgl1-mesa-dri:amd64 (18.0.5-0ubuntu0~16.04.1) ...
Setting up libx11-xcb1:amd64 (2:1.6.3-1ubuntu2) ...
Setting up libxcb-dri2-0:amd64 (1.11.1-1ubuntu1) ...
Setting up libxcb-dri3-0:amd64 (1.11.1-1ubuntu1) ...
Setting up libxcb-glx0:amd64 (1.11.1-1ubuntu1) ...
Setting up libxcb-present0:amd64 (1.11.1-1ubuntu1) ...
Setting up libxcb-sync1:amd64 (1.11.1-1ubuntu1) ...
Setting up libgl1-mesa-glx:amd64 (18.0.5-0ubuntu0~16.04.1) ...
update-alternatives: using /usr/lib/x86_64-linux-gnu/mesa/ld.so.conf to provide /etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf (x86_64-linux-gnu_gl_conf) in auto mode
Setting up libgraphite2-3:amd64 (1.3.10-0ubuntu0.16.04.1) ...
Setting up libgtk2.0-common (2.24.30-1ubuntu1.16.04.2) ...
Setting up libthai-data (0.1.24-2) ...
Setting up libthai0:amd64 (0.1.24-2) ...
Setting up libpango-1.0-0:amd64 (1.38.1-1) ...
Setting up libharfbuzz0b:amd64 (1.0.1-1ubuntu0.1) ...
Setting up libpangoft2-1.0-0:amd64 (1.38.1-1) ...
Setting up libpangocairo-1.0-0:amd64 (1.38.1-1) ...
Setting up libxcursor1:amd64 (1:1.1.14-1ubuntu0.16.04.2) ...
Setting up libxrandr2:amd64 (2:1.5.0-1) ...
Setting up libgtk2.0-0:amd64 (2.24.30-1ubuntu1.16.04.2) ...
Setting up libgtk2.0-bin (2.24.30-1ubuntu1.16.04.2) ...
Setting up xorg-sgml-doctools (1:1.11-1) ...
Setting up x11proto-core-dev (7.0.31-1~ubuntu16.04.2) ...
Setting up libice-dev:amd64 (2:1.0.9-1) ...
Setting up libpthread-stubs0-dev:amd64 (0.3-4) ...
Setting up libvorbis0a:amd64 (1.3.5-3ubuntu0.2) ...
Setting up libvorbisenc2:amd64 (1.3.5-3ubuntu0.2) ...
Setting up libsndfile1:amd64 (1.0.25-10ubuntu0.16.04.1) ...
Setting up libpulse0:amd64 (1:8.0-0ubuntu3.10) ...
Setting up libsm-dev:amd64 (2:1.2.2-1) ...
Setting up libxau-dev:amd64 (1:1.0.8-1) ...
Setting up libxdmcp-dev:amd64 (1:1.1.2-1.1) ...
Setting up x11proto-input-dev (2.3.1-1) ...
Setting up x11proto-kb-dev (1.0.7-0ubuntu1) ...
Setting up xtrans-dev (1.3.5-1) ...
Setting up libxcb1-dev:amd64 (1.11.1-1ubuntu1) ...
Setting up libx11-dev:amd64 (2:1.6.3-1ubuntu2) ...
Setting up libx11-doc (2:1.6.3-1ubuntu2) ...
Setting up libxt6:amd64 (1:1.1.5-0ubuntu1) ...
Setting up libxt-dev:amd64 (1:1.1.5-0ubuntu1) ...
Setting up tcpd (7.6.q-25) ...
Setting up libnss3-nssdb (2:3.28.4-0ubuntu0.16.04.3) ...
Setting up libnss3:amd64 (2:3.28.4-0ubuntu0.16.04.3) ...
Setting up openjdk-8-jre-headless:amd64 (8u181-b13-0ubuntu0.16.04.1) ...
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/rmid to provide /usr/bin/rmid (rmid) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java to provide /usr/bin/java (java) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/keytool to provide /usr/bin/keytool (keytool) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/jjs to provide /usr/bin/jjs (jjs) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/pack200 to provide /usr/bin/pack200 (pack200) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/rmiregistry to provide /usr/bin/rmiregistry (rmiregistry) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/unpack200 to provide /usr/bin/unpack200 (unpack200) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/orbd to provide /usr/bin/orbd (orbd) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/servertool to provide /usr/bin/servertool (servertool) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/tnameserv to provide /usr/bin/tnameserv (tnameserv) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/jexec to provide /usr/bin/jexec (jexec) in auto mode
Setting up ca-certificates-java (20160321ubuntu1) ...
done.
Setting up openjdk-8-jre:amd64 (8u181-b13-0ubuntu0.16.04.1) ...
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/policytool to provide /usr/bin/policytool (policytool) in auto mode
Setting up openjdk-8-jdk-headless:amd64 (8u181-b13-0ubuntu0.16.04.1) ...
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/idlj to provide /usr/bin/idlj (idlj) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/jdeps to provide /usr/bin/jdeps (jdeps) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/wsimport to provide /usr/bin/wsimport (wsimport) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/rmic to provide /usr/bin/rmic (rmic) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/jinfo to provide /usr/bin/jinfo (jinfo) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/jsadebugd to provide /usr/bin/jsadebugd (jsadebugd) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/native2ascii to provide /usr/bin/native2ascii (native2ascii) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/jstat to provide /usr/bin/jstat (jstat) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/javac to provide /usr/bin/javac (javac) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/javah to provide /usr/bin/javah (javah) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/jps to provide /usr/bin/jps (jps) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/jstack to provide /usr/bin/jstack (jstack) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/jrunscript to provide /usr/bin/jrunscript (jrunscript) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/javadoc to provide /usr/bin/javadoc (javadoc) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/jhat to provide /usr/bin/jhat (jhat) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/javap to provide /usr/bin/javap (javap) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/jar to provide /usr/bin/jar (jar) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/extcheck to provide /usr/bin/extcheck (extcheck) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/schemagen to provide /usr/bin/schemagen (schemagen) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/xjc to provide /usr/bin/xjc (xjc) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/jmap to provide /usr/bin/jmap (jmap) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/jstatd to provide /usr/bin/jstatd (jstatd) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/jdb to provide /usr/bin/jdb (jdb) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/serialver to provide /usr/bin/serialver (serialver) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/wsgen to provide /usr/bin/wsgen (wsgen) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/jcmd to provide /usr/bin/jcmd (jcmd) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/jarsigner to provide /usr/bin/jarsigner (jarsigner) in auto mode
Setting up openjdk-8-jdk:amd64 (8u181-b13-0ubuntu0.16.04.1) ...
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/appletviewer to provide /usr/bin/appletviewer (appletviewer) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/jconsole to provide /usr/bin/jconsole (jconsole) in auto mode
Processing triggers for libc-bin (2.23-0ubuntu10) ...
Processing triggers for systemd (229-4ubuntu21.2) ...
Processing triggers for ca-certificates (20170717~16.04.1) ...
Updating certificates in /etc/ssl/certs...
148 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...

Adding debian:ACCVRAIZ1.pem
Adding debian:ACEDICOM_Root.pem
Adding debian:AC_RAIZ_FNMT-RCM.pem
Adding debian:Actalis_Authentication_Root_CA.pem
Adding debian:AddTrust_External_Root.pem
Adding debian:AddTrust_Low-Value_Services_Root.pem
Adding debian:AddTrust_Public_Services_Root.pem
Adding debian:AddTrust_Qualified_Certificates_Root.pem
Adding debian:AffirmTrust_Commercial.pem
Adding debian:AffirmTrust_Networking.pem
Adding debian:AffirmTrust_Premium.pem
Adding debian:AffirmTrust_Premium_ECC.pem
Adding debian:Amazon_Root_CA_1.pem
Adding debian:Amazon_Root_CA_2.pem
Adding debian:Amazon_Root_CA_3.pem
Adding debian:Amazon_Root_CA_4.pem
Adding debian:Atos_TrustedRoot_2011.pem
Adding debian:Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.pem
Adding debian:Baltimore_CyberTrust_Root.pem
Adding debian:Buypass_Class_2_Root_CA.pem
Adding debian:Buypass_Class_3_Root_CA.pem
Adding debian:CA_Disig_Root_R1.pem
Adding debian:CA_Disig_Root_R2.pem
Adding debian:CFCA_EV_ROOT.pem
Adding debian:CNNIC_ROOT.pem
Adding debian:COMODO_Certification_Authority.pem
Adding debian:COMODO_ECC_Certification_Authority.pem
Adding debian:COMODO_RSA_Certification_Authority.pem
Adding debian:Camerfirma_Chambers_of_Commerce_Root.pem
Adding debian:Camerfirma_Global_Chambersign_Root.pem
Adding debian:Certigna.pem
Adding debian:Certinomis_-_Autorité_Racine.pem
Adding debian:Certinomis_-_Root_CA.pem
Adding debian:Certplus_Class_2_Primary_CA.pem
Adding debian:Certplus_Root_CA_G1.pem
Adding debian:Certplus_Root_CA_G2.pem
Adding debian:Certum_Root_CA.pem
Adding debian:Certum_Trusted_Network_CA.pem
Adding debian:Certum_Trusted_Network_CA_2.pem
Adding debian:Chambers_of_Commerce_Root_-_2008.pem
Adding debian:China_Internet_Network_Information_Center_EV_Certificates_Root.pem
Adding debian:Comodo_AAA_Services_root.pem
Adding debian:Comodo_Secure_Services_root.pem
Adding debian:Comodo_Trusted_Services_root.pem
Adding debian:Cybertrust_Global_Root.pem
Adding debian:D-TRUST_Root_Class_3_CA_2_2009.pem
Adding debian:D-TRUST_Root_Class_3_CA_2_EV_2009.pem
Adding debian:DST_ACES_CA_X6.pem
Adding debian:DST_Root_CA_X3.pem
Adding debian:Deutsche_Telekom_Root_CA_2.pem
Adding debian:DigiCert_Assured_ID_Root_CA.pem
Adding debian:DigiCert_Assured_ID_Root_G2.pem
Adding debian:DigiCert_Assured_ID_Root_G3.pem
Adding debian:DigiCert_Global_Root_CA.pem
Adding debian:DigiCert_Global_Root_G2.pem
Adding debian:DigiCert_Global_Root_G3.pem
Adding debian:DigiCert_High_Assurance_EV_Root_CA.pem
Adding debian:DigiCert_Trusted_Root_G4.pem
Adding debian:E-Tugra_Certification_Authority.pem
Adding debian:EC-ACC.pem
Adding debian:EE_Certification_Centre_Root_CA.pem
Adding debian:Entrust.net_Premium_2048_Secure_Server_CA.pem
Adding debian:Entrust_Root_Certification_Authority.pem
Adding debian:Entrust_Root_Certification_Authority_-_EC1.pem
Adding debian:Entrust_Root_Certification_Authority_-_G2.pem
Adding debian:GeoTrust_Global_CA.pem
Adding debian:GeoTrust_Global_CA_2.pem
Adding debian:GeoTrust_Primary_Certification_Authority.pem
Adding debian:GeoTrust_Primary_Certification_Authority_-_G2.pem
Adding debian:GeoTrust_Primary_Certification_Authority_-_G3.pem
Adding debian:GeoTrust_Universal_CA.pem
Adding debian:GeoTrust_Universal_CA_2.pem
Adding debian:GlobalSign_ECC_Root_CA_-_R4.pem
Adding debian:GlobalSign_ECC_Root_CA_-_R5.pem
Adding debian:GlobalSign_Root_CA.pem
Adding debian:GlobalSign_Root_CA_-_R2.pem
Adding debian:GlobalSign_Root_CA_-_R3.pem
Adding debian:Global_Chambersign_Root_-_2008.pem
Adding debian:Go_Daddy_Class_2_CA.pem
Adding debian:Go_Daddy_Root_Certificate_Authority_-_G2.pem
Adding debian:Hellenic_Academic_and_Research_Institutions_ECC_RootCA_2015.pem
Adding debian:Hellenic_Academic_and_Research_Institutions_RootCA_2011.pem
Adding debian:Hellenic_Academic_and_Research_Institutions_RootCA_2015.pem
Adding debian:Hongkong_Post_Root_CA_1.pem
Adding debian:ISRG_Root_X1.pem
Adding debian:IdenTrust_Commercial_Root_CA_1.pem
Adding debian:IdenTrust_Public_Sector_Root_CA_1.pem
Adding debian:Izenpe.com.pem
Adding debian:LuxTrust_Global_Root_2.pem
Adding debian:Microsec_e-Szigno_Root_CA_2009.pem
Adding debian:NetLock_Arany_=Class_Gold=_Főtanúsítvány.pem
Adding debian:Network_Solutions_Certificate_Authority.pem
Adding debian:OISTE_WISeKey_Global_Root_GA_CA.pem
Adding debian:OISTE_WISeKey_Global_Root_GB_CA.pem
Adding debian:OpenTrust_Root_CA_G1.pem
Adding debian:OpenTrust_Root_CA_G2.pem
Adding debian:OpenTrust_Root_CA_G3.pem
Adding debian:PSCProcert.pem
Adding debian:QuoVadis_Root_CA.pem
Adding debian:QuoVadis_Root_CA_1_G3.pem
Adding debian:QuoVadis_Root_CA_2.pem
Adding debian:QuoVadis_Root_CA_2_G3.pem
Adding debian:QuoVadis_Root_CA_3.pem
Adding debian:QuoVadis_Root_CA_3_G3.pem
Adding debian:SZAFIR_ROOT_CA2.pem
Adding debian:SecureSign_RootCA11.pem
Adding debian:SecureTrust_CA.pem
Adding debian:Secure_Global_CA.pem
Adding debian:Security_Communication_EV_RootCA1.pem
Adding debian:Security_Communication_RootCA2.pem
Adding debian:Security_Communication_Root_CA.pem
Adding debian:Sonera_Class_2_Root_CA.pem
Adding debian:Staat_der_Nederlanden_EV_Root_CA.pem
Adding debian:Staat_der_Nederlanden_Root_CA_-_G2.pem
Adding debian:Staat_der_Nederlanden_Root_CA_-_G3.pem
Adding debian:Starfield_Class_2_CA.pem
Adding debian:Starfield_Root_Certificate_Authority_-_G2.pem
Adding debian:Starfield_Services_Root_Certificate_Authority_-_G2.pem
Adding debian:SwissSign_Gold_CA_-_G2.pem
Adding debian:SwissSign_Silver_CA_-_G2.pem
Adding debian:Swisscom_Root_CA_1.pem
Adding debian:Swisscom_Root_CA_2.pem
Adding debian:Swisscom_Root_EV_CA_2.pem
Adding debian:T-TeleSec_GlobalRoot_Class_2.pem
Adding debian:T-TeleSec_GlobalRoot_Class_3.pem
Adding debian:TUBITAK_Kamu_SM_SSL_Kok_Sertifikasi_-_Surum_1.pem
Adding debian:TURKTRUST_Certificate_Services_Provider_Root_2007.pem
Adding debian:TWCA_Global_Root_CA.pem
Adding debian:TWCA_Root_Certification_Authority.pem
Adding debian:Taiwan_GRCA.pem
Adding debian:TeliaSonera_Root_CA_v1.pem
Adding debian:Trustis_FPS_Root_CA.pem
Adding debian:TÜBİTAK_UEKAE_Kök_Sertifika_Hizmet_Sağlayıcısı_-_Sürüm_3.pem
Adding debian:TÜRKTRUST_Elektronik_Sertifika_Hizmet_Sağlayıcısı_H5.pem
Adding debian:USERTrust_ECC_Certification_Authority.pem
Adding debian:USERTrust_RSA_Certification_Authority.pem
Adding debian:UTN_USERFirst_Hardware_Root_CA.pem
Adding debian:VeriSign_Class_3_Public_Primary_Certification_Authority_-_G4.pem
Adding debian:VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5.pem
Adding debian:VeriSign_Universal_Root_Certification_Authority.pem
Adding debian:Verisign_Class_3_Public_Primary_Certification_Authority_-_G3.pem
Adding debian:Visa_eCommerce_Root.pem
Adding debian:XRamp_Global_CA_Root.pem
Adding debian:certSIGN_ROOT_CA.pem
Adding debian:ePKI_Root_Certification_Authority.pem
Adding debian:thawte_Primary_Root_CA.pem
Adding debian:thawte_Primary_Root_CA_-_G2.pem
Adding debian:thawte_Primary_Root_CA_-_G3.pem
done.
done.
Processing triggers for sgml-base (1.26+nmu4ubuntu1) ...
Removing intermediate container 0f23a95bea42
 ---> 8f93746ccfe5
Step 7/7 : RUN apt-get install -y python
 ---> Running in fc2aeb8c23dd
Reading package lists...
Building dependency tree...
Reading state information...
The following additional packages will be installed:
  file libmagic1 libpython-stdlib libpython2.7-minimal libpython2.7-stdlib
  mime-support python-minimal python2.7 python2.7-minimal
Suggested packages:
  python-doc python-tk python2.7-doc binfmt-support
The following NEW packages will be installed:
  file libmagic1 libpython-stdlib libpython2.7-minimal libpython2.7-stdlib
  mime-support python python-minimal python2.7 python2.7-minimal
0 upgraded, 10 newly installed, 0 to remove and 6 not upgraded.
Need to get 4145 kB of archives.
After this operation, 20.9 MB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libpython2.7-minimal amd64 2.7.12-1ubuntu0~16.04.3 [340 kB]
Get:2 http://101.44.1.125/files/B067000006FC9787/ubuntu.cn99.com/ubuntu xenial-updates/main amd64 python2.7-minimal amd64 2.7.12-1ubuntu0~16.04.3 [1261 kB]
Get:3 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 python-minimal amd64 2.7.12-1~16.04 [28.1 kB]
Get:4 http://archive.ubuntu.com/ubuntu xenial/main amd64 mime-support all 3.59ubuntu1 [31.0 kB]
Get:5 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libpython2.7-stdlib amd64 2.7.12-1ubuntu0~16.04.3 [1880 kB]
Get:6 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 python2.7 amd64 2.7.12-1ubuntu0~16.04.3 [224 kB]
Get:7 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libpython-stdlib amd64 2.7.12-1~16.04 [7768 B]
Get:8 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 python amd64 2.7.12-1~16.04 [137 kB]
Get:9 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libmagic1 amd64 1:5.25-2ubuntu1.1 [216 kB]
Get:10 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 file amd64 1:5.25-2ubuntu1.1 [21.2 kB]
debconf: delaying package configuration, since apt-utils is not installed
Fetched 4145 kB in 8s (517 kB/s)
Selecting previously unselected package libpython2.7-minimal:amd64.
(Reading database ... 14046 files and directories currently installed.)
Preparing to unpack .../libpython2.7-minimal_2.7.12-1ubuntu0~16.04.3_amd64.deb ...
Unpacking libpython2.7-minimal:amd64 (2.7.12-1ubuntu0~16.04.3) ...
Selecting previously unselected package python2.7-minimal.
Preparing to unpack .../python2.7-minimal_2.7.12-1ubuntu0~16.04.3_amd64.deb ...
Unpacking python2.7-minimal (2.7.12-1ubuntu0~16.04.3) ...
Selecting previously unselected package python-minimal.
Preparing to unpack .../python-minimal_2.7.12-1~16.04_amd64.deb ...
Unpacking python-minimal (2.7.12-1~16.04) ...
Selecting previously unselected package mime-support.
Preparing to unpack .../mime-support_3.59ubuntu1_all.deb ...
Unpacking mime-support (3.59ubuntu1) ...
Selecting previously unselected package libpython2.7-stdlib:amd64.
Preparing to unpack .../libpython2.7-stdlib_2.7.12-1ubuntu0~16.04.3_amd64.deb ...
Unpacking libpython2.7-stdlib:amd64 (2.7.12-1ubuntu0~16.04.3) ...
Selecting previously unselected package python2.7.
Preparing to unpack .../python2.7_2.7.12-1ubuntu0~16.04.3_amd64.deb ...
Unpacking python2.7 (2.7.12-1ubuntu0~16.04.3) ...
Selecting previously unselected package libpython-stdlib:amd64.
Preparing to unpack .../libpython-stdlib_2.7.12-1~16.04_amd64.deb ...
Unpacking libpython-stdlib:amd64 (2.7.12-1~16.04) ...
Setting up libpython2.7-minimal:amd64 (2.7.12-1ubuntu0~16.04.3) ...
Setting up python2.7-minimal (2.7.12-1ubuntu0~16.04.3) ...
Linking and byte-compiling packages for runtime python2.7...
Setting up python-minimal (2.7.12-1~16.04) ...
Selecting previously unselected package python.
(Reading database ... 14818 files and directories currently installed.)
Preparing to unpack .../python_2.7.12-1~16.04_amd64.deb ...
Unpacking python (2.7.12-1~16.04) ...
Selecting previously unselected package libmagic1:amd64.
Preparing to unpack .../libmagic1_1%3a5.25-2ubuntu1.1_amd64.deb ...
Unpacking libmagic1:amd64 (1:5.25-2ubuntu1.1) ...
Selecting previously unselected package file.
Preparing to unpack .../file_1%3a5.25-2ubuntu1.1_amd64.deb ...
Unpacking file (1:5.25-2ubuntu1.1) ...
Processing triggers for libc-bin (2.23-0ubuntu10) ...
Setting up mime-support (3.59ubuntu1) ...
Setting up libpython2.7-stdlib:amd64 (2.7.12-1ubuntu0~16.04.3) ...
Setting up python2.7 (2.7.12-1ubuntu0~16.04.3) ...
Setting up libpython-stdlib:amd64 (2.7.12-1~16.04) ...
Setting up python (2.7.12-1~16.04) ...
Setting up libmagic1:amd64 (1:5.25-2ubuntu1.1) ...
Setting up file (1:5.25-2ubuntu1.1) ...
Processing triggers for libc-bin (2.23-0ubuntu10) ...
Removing intermediate container fc2aeb8c23dd
 ---> 057807ccc7d8
Successfully built 057807ccc7d8
Successfully tagged hanshanyang/coj_demo_01:latest
docker build

安装完成我们

 

 

等他安装完成 会把这个状态创建成一个image存在本地

然后我们在 push到docker hub上去(远程) 和我们的git很相似

我们登录到docker hub上去(自己去官网创建账号)

 

登录上了 

我们就要push了

 

 

这说明上传成功

那么从docker hub 下拉image也很简单 就是 pull

如果你本地有这个image他会自动更新到最新的

如果你要删除

 

android – FragmentStatePagerAdapter with ChildFragmentManager – FragmentManagerImpl.getFragment导

android – FragmentStatePagerAdapter with ChildFragmentManager – FragmentManagerImpl.getFragment导

编辑2

我现在设法通过使用来自这里https://code.google.com/p/android/issues/detail?id=42601#c10的技巧摆脱了错误,这就是为什么我的最后一次编辑放在我的问题之上的原因.

但这导致了下一个错误:

java.lang.NullPointerException
at android.support.v4.app.FragmentManagerImpl.getFragment(FragmentManager.java:569)
at android.support.v4.app.FragmentStatePagerAdapter.restoreState(FragmentStatePagerAdapter.java:211)
at android.support.v4.view.ViewPager.onRestoreInstanceState(ViewPager.java:1281)
at android.view.View.dispatchRestoreInstanceState(View.java:12043)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2688)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2694)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2694)
at android.view.View.restoreHierarchyState(View.java:12021)
at android.support.v4.app.Fragment.restoreViewState(Fragment.java:425)
at android.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:949)
at android.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:1104)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4800)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:798)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:565)
at dalvik.system.NativeStart.main(Native Method)

现在我不知道从哪里继续……

编辑0 – 第一个问题

我得到以下异常:

java.lang.IllegalStateException: No activity
at android.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:1091)
at android.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:1086)
at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1877)
at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1492)
at android.support.v4.app._HoloFragment.performActivityCreated(_HoloFragment.java:251)
at android.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:947)
at android.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:1104)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4800)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:798)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:565)
at dalvik.system.NativeStart.main(Native Method)

我不知道从哪里开始.我正在使用最新的支持库(v4,rev18).

一切正常,直到我添加一个Fragment,它将ViewPager与FragmentStatePagerAdapter结合在一起.

我到处都在使用支持库,我尝试了https://code.google.com/p/android/issues/detail?id=42601的解决方案……

但还没有任何效果……

我不知道从哪里开始,有人有提示吗?

编辑1:背景和代码

1)在我的MainActivity中,我使用以下内容:

第三页有viewpager …

public void setPage(int pos, boolean addToBackStack)
 {
    Fragment nextFragment = null;
    FragmentTransaction transaction = null;

    switch (pos)
    {
        case 0:
            if (mFragmentAllRoutines == null)
                mFragmentAllRoutines = new RoutinesListFragment();
            if (!mFragmentAllRoutines.isVisible())
                nextFragment = mFragmentAllRoutines;
            break;
        case 1:
            if (mFragmentRoutine == null)
                mFragmentRoutine = new RoutineFragment();
            if (!mFragmentRoutine.isVisible())
                nextFragment = mFragmentRoutine;
            break;
        case 2:
            if (mFragmentDay == null)
                mFragmentDay = new RoutineDayFragment();
            if (!mFragmentDay.isVisible())
                nextFragment = mFragmentDay;
            break;
        default:
            break;
    }

    if (nextFragment != null)
    {
        // Fragment prevFragment = getSupportFragmentManager().findFragmentById(R.id.fragment);
        transaction = getSupportFragmentManager().beginTransaction();
        // if (prevFragment != null)
        //    transaction.detach(prevFragment);
        transaction.replace(R.id.fragment, nextFragment, nextFragment.getClass().getName());
        // transaction.attach(nextFragment);
        if (addToBackStack)
            transaction.addToBackStack(null);
        transaction.commit();
    }
}

2)第三个片段:

它是一个带有ViewPager和FragmentStatePagerAdapter的简单片段. FragmentStatePagerAdapter将getChildFragmentManager()作为FragmentManager获取.在某个地方似乎存在问题.

解决方法:

我需要看到更多的代码才能知道在哪里应用这个……但是我遇到了类似的情况……我以同样的方式解决了ChildFragmentManager问题,并得到了与你一样的NullPointerException.

我确实设法解决了……我会尝试描述我的解决方案,就像你提供的代码一样,我不确定在哪里应用“修复”…这真的是一个修复…它不是一个优雅的方式解决这个问题!然而它确实对我有所帮助,一旦我离开视图寻呼机,我就不需要恢复状态,因此对我来说没有任何不利因素.

我有多个Fragments,它实现了代码的静态位和onDetach(在https://code.google.com/p/android/issues/detail?id=42601#c10上),每个片段都有一个寻呼机,onCreateView我附加了一个扩展FragmentStatePagerAdapter的适配器.

在那些适配器上,我已经覆盖了restoreState方法,什么都不做

    @Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {
    //do nothing here! no call to super.restoreState(arg0, arg1);
}

再次,这不是最好的方式……但它确实解决了我的问题.

祝你好运!

com.facebook.imagepipeline.image.EncodedImage的实例源码

com.facebook.imagepipeline.image.EncodedImage的实例源码

项目:GitHub    文件:AnimatedImageFactoryImpl.java   
/**
 * Decodes a GIF into a CloseableImage.
 * @param encodedImage encoded image (native byte array holding the encoded bytes and Meta data)
 * @param options the options for the decode
 * @param bitmapConfig the Bitmap.Config used to generate the output bitmaps
 * @return a {@link CloseableImage} for the GIF image
 */
public CloseableImage decodeGif(
    final EncodedImage encodedImage,final ImageDecodeOptions options,final Bitmap.Config bitmapConfig) {
  if (sgifAnimatedimagedecoder == null) {
    throw new UnsupportedOperationException("To encode animated gif please add the dependency " +
        "to the animated-gif module");
  }
  final CloseableReference<PooledByteBuffer> bytesRef = encodedImage.getByteBufferRef();
  Preconditions.checkNotNull(bytesRef);
  try {
    final PooledByteBuffer input = bytesRef.get();
    AnimatedImage gifImage = sgifAnimatedimagedecoder.decode(input.getNativePtr(),input.size());

    return getCloseableImage(options,gifImage,bitmapConfig);
  } finally {
    CloseableReference.closeSafely(bytesRef);
  }
}
项目:GitHub    文件:AnimatedImageFactoryImpl.java   
/**
 * Decode a WebP into a CloseableImage.
 * @param encodedImage encoded image (native byte array holding the encoded bytes and Meta data)
 * @param options the options for the decode
 * @param bitmapConfig the Bitmap.Config used to generate the output bitmaps
 * @return a {@link CloseableImage} for the WebP image
 */
public CloseableImage decodeWebP(
    final EncodedImage encodedImage,final Bitmap.Config bitmapConfig) {
  if (sWebpAnimatedimagedecoder == null) {
    throw new UnsupportedOperationException("To encode animated webp please add the dependency " +
        "to the animated-webp module");
  }
  final CloseableReference<PooledByteBuffer> bytesRef = encodedImage.getByteBufferRef();
  Preconditions.checkNotNull(bytesRef);
  try {
    final PooledByteBuffer input = bytesRef.get();
    AnimatedImage webPImage = sWebpAnimatedimagedecoder.decode(
        input.getNativePtr(),input.size());
    return getCloseableImage(options,webPImage,bitmapConfig);
  } finally {
    CloseableReference.closeSafely(bytesRef);
  }
}
项目:GitHub    文件:diskCacheReadProducerTest.java   
@Test
public void testSmallImagediskCacheGetSuccessful() {
  when(mImageRequest.getCacheChoice()).thenReturn(ImageRequest.CacheChoice.SMALL);
  setupdiskCacheGetSuccess(mSmallImageBuffereddiskCache);
  mdiskCacheReadProducer.produceResults(mConsumer,mProducerContext);
  verify(mConsumer).onNewResult(mFinalEncodedImage,Consumer.IS_LAST);
  verify(mProducerListener).onProducerStart(mRequestId,PRODUCER_NAME);
  ArgumentCaptor<HashMap> captor = ArgumentCaptor.forClass(HashMap.class);
  verify(mProducerListener).onProducerFinishWithSuccess(
      eq(mRequestId),eq(PRODUCER_NAME),captor.capture());
  Map<String,String> resultMap = captor.getValue();
  assertEquals("true",resultMap.get(diskCacheReadProducer.EXTRA_CACHED_VALUE_FOUND));
  assertEquals(
      "0",resultMap.get(diskCacheReadProducer.ENCODED_IMAGE_SIZE));
  verify(mProducerListener).onUltimateProducerReached(mRequestId,PRODUCER_NAME,true);
  Assert.assertFalse(EncodedImage.isValid(mFinalEncodedImage));
}
项目:GitHub    文件:WebpTranscodeProducer.java   
@Override
protected void onNewResultImpl(@Nullable EncodedImage newResult,@Status int status) {
  // try to determine if the last result should be transformed
  if (mShouldTranscodeWhenFinished == TriState.UNSET && newResult != null) {
    mShouldTranscodeWhenFinished = shouldTranscode(newResult);
  }

  // just propagate result if it shouldn't be transformed
  if (mShouldTranscodeWhenFinished == TriState.NO) {
    getConsumer().onNewResult(newResult,status);
    return;
  }

  if (isLast(status)) {
    if (mShouldTranscodeWhenFinished == TriState.YES && newResult != null) {
      transcodeLastResult(newResult,getConsumer(),mContext);
    } else {
      getConsumer().onNewResult(newResult,status);
    }
  }
}
项目:GitHub    文件:ProducerSequenceFactory.java   
/**
 * bitmap cache get ->
 * background thread hand-off -> bitmap cache -> decode -> resize and rotate -> (webp transcode)
 * -> data fetch.
 */
private synchronized Producer<CloseableReference<CloseableImage>> getDataFetchSequence() {
  if (mDataFetchSequence == null) {
    Producer<EncodedImage> inputProducer = mProducerFactory.newDataFetchProducer();
    if (WebpSupportStatus.sIsWebpSupportrequired &&
        (!mWebpSupportEnabled || WebpSupportStatus.sWebpBitmapFactory == null)) {
      inputProducer = mProducerFactory.newWebpTranscodeProducer(inputProducer);
    }
    inputProducer = mProducerFactory.newAddImageTransformMetaDataProducer(inputProducer);
    inputProducer = mProducerFactory.newResizeAndRotateProducer(
        inputProducer,true,mUseDownsamplingRatio);
    mDataFetchSequence = newBitmapCacheGetToDecodeSequence(inputProducer);
  }
  return mDataFetchSequence;
}
项目:GitHub    文件:BranchOnSeparateImagesProducerTest.java   
@Test
public void testFirstProducerResultNotGoodEnough() {
  EncodedImage firstProducerEncodedImage = new EncodedImage(
      mFirstProducerFinalResult.getByteBufferRef());
  firstProducerEncodedImage.setRotationAngle(-1);
  firstProducerEncodedImage.setWidth(WIDTH / 2);
  firstProducerEncodedImage.setHeight(HEIGHT / 2);
  mFirstProducerConsumer.onNewResult(firstProducerEncodedImage,Consumer.IS_LAST);
  verify(mConsumer).onNewResult(firstProducerEncodedImage,Consumer.NO_FLAGS);

  EncodedImage intermediateEncodedImage = new EncodedImage(
      mIntermediateResult.getByteBufferRef());
  intermediateEncodedImage.setRotationAngle(-1);
  intermediateEncodedImage.setWidth(WIDTH / 2);
  intermediateEncodedImage.setHeight(HEIGHT / 2);
  mSecondProducerConsumer.onNewResult(intermediateEncodedImage,Consumer.NO_FLAGS);
  verify(mConsumer).onNewResult(intermediateEncodedImage,Consumer.NO_FLAGS);
  EncodedImage secondProducerEncodedImage = new EncodedImage(
      mSecondProducerFinalResult.getByteBufferRef());
  secondProducerEncodedImage.setRotationAngle(-1);
  secondProducerEncodedImage.setWidth(WIDTH / 2);
  secondProducerEncodedImage.setHeight(HEIGHT / 2);
  mSecondProducerConsumer.onNewResult(secondProducerEncodedImage,Consumer.IS_LAST);
  verify(mConsumer).onNewResult(secondProducerEncodedImage,Consumer.IS_LAST);
}
项目:GitHub    文件:EncodedMemoryCacheProducerTest.java   
@Test
public void testEncodedMemoryCacheGetNotFoundInputProducerSuccess() {
  setupEncodedMemoryCacheGetNotFound();
  setupInputProducerStreamingSuccess();
  mEncodedMemoryCacheProducer.produceResults(mConsumer,mProducerContext);
  verify(mMemoryCache,never()).cache(mCacheKey,mIntermediateImageReference);
  ArgumentCaptor<CloseableReference> argumentCaptor =
      ArgumentCaptor.forClass(CloseableReference.class);
  verify(mMemoryCache).cache(eq(mCacheKey),argumentCaptor.capture());
  CloseableReference<PooledByteBuffer> capturedRef =
      (CloseableReference<PooledByteBuffer>) argumentCaptor.getValue();
  Assert.assertSame(
      mFinalImageReference.getUnderlyingReferenceTestOnly(),capturedRef.getUnderlyingReferenceTestOnly());
  verify(mConsumer).onNewResult(mIntermediateEncodedImage,Consumer.NO_FLAGS);
  verify(mConsumer).onNewResult(mFinalEncodedImage,Consumer.IS_LAST);
  Assert.assertTrue(EncodedImage.isValid(mFinalEncodedImageClone));
  verify(mProducerListener).onProducerStart(mRequestId,PRODUCER_NAME);
  Map<String,String> extraMap =
      ImmutableMap.of(EncodedMemoryCacheProducer.EXTRA_CACHED_VALUE_FOUND,"false");
  verify(mProducerListener).onProducerFinishWithSuccess(mRequestId,extraMap);
  verify(mProducerListener,never())
      .onUltimateProducerReached(anyString(),anyString(),anyBoolean());
}
项目:GitHub    文件:DalvikPurgeableDecoder.java   
/**
 * Creates a bitmap from encoded bytes.
 *
 * @param encodedImage the encoded image with reference to the encoded bytes
 * @param bitmapConfig the {@link android.graphics.Bitmap.Config} used to create the decoded
 *     Bitmap
 * @param regionToDecode optional image region to decode. currently not supported.
 * @return the bitmap
 * @throws TooManyBitmapsException if the pool is full
 * @throws java.lang.OutOfMemoryError if the Bitmap cannot be allocated
 */
@Override
public CloseableReference<Bitmap> decodeFromEncodedImage(
    final EncodedImage encodedImage,Bitmap.Config bitmapConfig,@Nullable Rect regionToDecode) {
  BitmapFactory.Options options = getBitmapFactoryOptions(
      encodedImage.getSampleSize(),bitmapConfig);
  CloseableReference<PooledByteBuffer> bytesRef = encodedImage.getByteBufferRef();
  Preconditions.checkNotNull(bytesRef);
  try {
    Bitmap bitmap = decodeByteArrayAsPurgeable(bytesRef,options);
    return pinBitmap(bitmap);
  } finally {
    CloseableReference.closeSafely(bytesRef);
  }
}
项目:GitHub    文件:ProducerSequenceFactory.java   
/**
 * bitmap cache get ->
 * background thread hand-off -> multiplex -> bitmap cache -> decode ->
 * branch on separate images
 *   -> thumbnail resize and rotate -> thumbnail branch
 *     -> local content thumbnail creation
 *     -> exif thumbnail creation
 *   -> local image resize and rotate -> add Meta data producer -> multiplex -> encoded cache ->
 *   (webp transcode) -> local content uri fetch.
 */
private synchronized Producer<CloseableReference<CloseableImage>>
getLocalContentUriFetchSequence() {
  if (mLocalContentUriFetchSequence == null) {
    LocalContentUriFetchProducer localContentUriFetchProducer =
        mProducerFactory.newLocalContentUriFetchProducer();

    ThumbnailProducer<EncodedImage>[] thumbnailProducers = new ThumbnailProducer[2];
    thumbnailProducers[0] = mProducerFactory.newLocalContentUriThumbnailFetchProducer();
    thumbnailProducers[1] = mProducerFactory.newLocalExifThumbnailProducer();

    mLocalContentUriFetchSequence = newBitmapCacheGetToLocalTransformSequence(
        localContentUriFetchProducer,thumbnailProducers);
  }
  return mLocalContentUriFetchSequence;
}
项目:GitHub    文件:ArtDecoder.java   
/**
 * Options returned by this method are configured with mDecodeBuffer which is GuardedBy("this")
 */
private static BitmapFactory.Options getDecodeOptionsForStream(
    EncodedImage encodedImage,Bitmap.Config bitmapConfig) {
  final BitmapFactory.Options options = new BitmapFactory.Options();
  // Sample size should ONLY be different than 1 when downsampling is enabled in the pipeline
  options.inSampleSize = encodedImage.getSampleSize();
  options.inJustDecodeBounds = true;
  // fill outWidth and outHeight
  BitmapFactory.decodeStream(encodedImage.getInputStream(),null,options);
  if (options.outWidth == -1 || options.outHeight == -1) {
    throw new IllegalArgumentException();
  }

  options.inJustDecodeBounds = false;
  options.inDither = true;
  options.inPreferredConfig = bitmapConfig;
  options.inMutable = true;

  return options;
}
项目:GitHub    文件:Defaultimagedecoder.java   
/**
 * Decodes image.
 *
 * @param encodedImage input image (encoded bytes plus Meta data)
 * @param length if image type supports decoding incomplete image then determines where the image
 *     data should be cut for decoding.
 * @param qualityInfo quality information for the image
 * @param options options that cange decode behavior
 */
@Override
public CloseableImage decode(
    final EncodedImage encodedImage,final int length,final QualityInfo qualityInfo,final ImageDecodeOptions options) {
  if (options.customimagedecoder != null) {
    return options.customimagedecoder.decode(encodedImage,length,qualityInfo,options);
  }
  ImageFormat imageFormat = encodedImage.getimageFormat();
  if (imageFormat == null || imageFormat == ImageFormat.UNKNowN) {
    imageFormat = ImageFormatChecker.getimageFormat_WrapIOException(
        encodedImage.getInputStream());
    encodedImage.setimageFormat(imageFormat);
  }
  if (mCustomDecoders != null) {
    imagedecoder decoder = mCustomDecoders.get(imageFormat);
    if (decoder != null) {
      return decoder.decode(encodedImage,options);
    }
  }
  return mDefaultDecoder.decode(encodedImage,options);
}
项目:GitHub    文件:StagingArea.java   
/**
 * Determine if an valid entry for the key exists in the staging area.
 */
public synchronized boolean containsKey(CacheKey key) {
  Preconditions.checkNotNull(key);
  if (!mMap.containsKey(key)) {
    return false;
  }
  EncodedImage storedEncodedImage = mMap.get(key);
  synchronized (storedEncodedImage) {
    if (!EncodedImage.isValid(storedEncodedImage)) {
      // Reference is not valid,this means that someone cleared reference while it was still in
      // use. Log error
      // Todo: 3697790
      mMap.remove(key);
      FLog.w(
          TAG,"Found closed reference %d for key %s (%d)",System.identityHashCode(storedEncodedImage),key.getUriString(),System.identityHashCode(key));
      return false;
    }
    return true;
  }
}
项目:GitHub    文件:BuffereddiskCache.java   
/**
 * Performs key-value loop up in staging area and file cache.
 * Any error manifests itself as a miss,i.e. returns false.
 * @param key
 * @return true if the image is found in staging area or File cache,false if not found
 */
private boolean checkInStagingAreaAndFileCache(final CacheKey key) {
  EncodedImage result = mStagingArea.get(key);
  if (result != null) {
    result.close();
    FLog.v(TAG,"Found image for %s in staging area",key.getUriString());
    mImageCacheStatsTracker.onStagingAreaHit(key);
    return true;
  } else {
    FLog.v(TAG,"Did not find image for %s in staging area",key.getUriString());
    mImageCacheStatsTracker.onStagingAreaMiss();
    try {
      return mFileCache.hasKey(key);
    } catch (Exception exception) {
      return false;
    }
  }
}
项目:GitHub    文件:LocalContentUriThumbnailFetchProducerTest.java   
private void mockThumbnailFile() throws Exception {
  powermockito.whenNew(File.class)
      .withArguments(THUMBNAIL_FILE_NAME)
      .thenReturn(mThumbnailFile);
  when(mThumbnailFile.exists()).thenReturn(true);
  when(mThumbnailFile.length()).thenReturn(THUMBNAIL_FILE_SIZE);

  powermockito.whenNew(FileInputStream.class)
      .withArguments(THUMBNAIL_FILE_NAME)
      .thenReturn(mock(FileInputStream.class));

  EncodedImage encodedImage = mock(EncodedImage.class);
  when(encodedImage.getSize()).thenReturn((int) THUMBNAIL_FILE_SIZE);

  powermockito.whenNew(EncodedImage.class)
      .withAnyArguments()
      .thenReturn(encodedImage);
}
项目:GitHub    文件:NetworkFetchProducer.java   
@Override
public void produceResults(Consumer<EncodedImage> consumer,ProducerContext context) {
  context.getListener()
      .onProducerStart(context.getId(),PRODUCER_NAME);
  final FetchState fetchState = mNetworkFetcher.createFetchState(consumer,context);
  mNetworkFetcher.fetch(
      fetchState,new NetworkFetcher.Callback() {
        @Override
        public void onResponse(InputStream response,int responseLength) throws IOException {
          NetworkFetchProducer.this.onResponse(fetchState,response,responseLength);
        }

        @Override
        public void onFailure(Throwable throwable) {
          NetworkFetchProducer.this.onFailure(fetchState,throwable);
        }

        @Override
        public void onCancellation() {
          NetworkFetchProducer.this.onCancellation(fetchState);
        }
      });
}
项目:GitHub    文件:AddImageTransformMetaDataProducerTest.java   
@Test
public void testOnNewResultNotLast_DimensionsNotFound() {
  int rotationAngle = 180;
  int orientation = 1;
  when(ImageFormatChecker.getimageFormat_WrapIOException(any(InputStream.class)))
      .thenReturn(DefaultimageFormats.JPEG);
  when(JfifUtil.getAutoRotateAngleFromOrientation(orientation)).thenReturn(rotationAngle);
  when(JfifUtil.getorientation(any(InputStream.class))).thenReturn(orientation);
  when(BitmapUtil.decodeDimensions(any(InputStream.class))).thenReturn(null);
  mAddMetaDataConsumer.onNewResult(mIntermediateResult,Consumer.NO_FLAGS);
  ArgumentCaptor<EncodedImage> argumentCaptor = ArgumentCaptor.forClass(EncodedImage.class);
  verify(mConsumer).onNewResult(argumentCaptor.capture(),eq(Consumer.NO_FLAGS));
  EncodedImage encodedImage = argumentCaptor.getValue();
  assertTrue(EncodedImage.isValid(encodedImage));
  assertEquals(-1,encodedImage.getRotationAngle());
  assertEquals(-1,encodedImage.getWidth());
  assertEquals(-1,encodedImage.getHeight());
}
项目:GitHub    文件:ResizeAndRotateProducerTest.java   
@Test
public void testDoesNottransformIfImageRotationAngleUnkown() {
  whenResizingEnabled();
  whenRequestSpecificRotation(Rotationoptions.NO_ROTATION);

  provideIntermediateResult(
      DefaultimageFormats.JPEG,800,EncodedImage.UNKNowN_ROTATION_ANGLE,ExifInterface.ORIENTATION_UNDEFINED);
  verifyIntermediateResultPassedThroughUnchanged();

  provideFinalResult(
      DefaultimageFormats.JPEG,ExifInterface.ORIENTATION_UNDEFINED);
  verifyFinalResultPassedThroughUnchanged();
  verifyZeroJpegTranscoderInteractions();
}
项目:GitHub    文件:ProducerSequenceFactory.java   
/**
 * background-thread hand-off -> multiplex -> encoded cache ->
 * disk cache -> (webp transcode) -> local file fetch
 */
private synchronized Producer<EncodedImage> getBackgroundLocalFileFetchToEncodeMemorySequence() {
  if (mBackgroundLocalFileFetchToEncodedMemorySequence == null) {
    final LocalFileFetchProducer localFileFetchProducer =
        mProducerFactory.newLocalFileFetchProducer();

    final Producer<EncodedImage> toEncodedMultiplexProducer =
        newEncodedCacheMultiplexToTranscodeSequence(localFileFetchProducer);

    mBackgroundLocalFileFetchToEncodedMemorySequence =
        mProducerFactory.newBackgroundThreadHandoffProducer(
            toEncodedMultiplexProducer,mThreadHandoffProducerQueue);
  }
  return mBackgroundLocalFileFetchToEncodedMemorySequence;
}
项目:GitHub    文件:MediaVariationsFallbackProducerTest.java   
private void verifyInputProducerProduceResultsWithNewConsumer(boolean allowIntermediateResult) {
  verify(mInputProducer)
      .produceResults(mConsumerCaptor.capture(),mProducerContextCaptor.capture());

  Consumer<EncodedImage> consumer = mConsumerCaptor.getValue();
  assertthat(consumer).isinstanceOf(MediaVariationsConsumer.class);
  assertthat(((MediaVariationsConsumer) consumer).getConsumer()).isSameAs(mConsumer);

  SettableProducerContext referenceContext = new SettableProducerContext(mProducerContext);
  referenceContext.setIsIntermediateResultExpected(allowIntermediateResult);
  ProducerContext capturedContext = mProducerContextCaptor.getValue();
  assertEquals(referenceContext.getCallerContext(),capturedContext.getCallerContext());
  assertEquals(referenceContext.getId(),capturedContext.getId());
  assertEquals(referenceContext.getimageRequest(),capturedContext.getimageRequest());
  assertEquals(referenceContext.getListener(),capturedContext.getListener());
  assertEquals(
      referenceContext.getLowestPermittedRequestLevel(),capturedContext.getLowestPermittedRequestLevel());
  assertEquals(referenceContext.getPriority(),capturedContext.getPriority());
  assertEquals(
      referenceContext.isIntermediateResultExpected(),capturedContext.isIntermediateResultExpected());
}
项目:GitHub    文件:BranchOnSeparateImagesProducer.java   
@Override
protected void onNewResultImpl(EncodedImage newResult,@Status int status) {
  ImageRequest request = mProducerContext.getimageRequest();
  boolean isLast = isLast(status);
  boolean isGoodEnough =
      ThumbnailSizeChecker.isImageBigEnough(newResult,request.getResizeOptions());
  if (newResult != null && (isGoodEnough || request.getLocalThumbnailPreviewsEnabled())) {
    if (isLast && isGoodEnough) {
      getConsumer().onNewResult(newResult,status);
    } else {
      int alteredStatus = turnOffStatusFlag(status,IS_LAST);
      getConsumer().onNewResult(newResult,alteredStatus);
    }
  }
  if (isLast && !isGoodEnough) {
    EncodedImage.closeSafely(newResult);

    mInputProducer2.produceResults(getConsumer(),mProducerContext);
  }
}
项目:GitHub    文件:LocalContentUriFetchProducer.java   
private @Nullable EncodedImage getCameraimage(Uri uri) throws IOException {
  Cursor cursor = mContentResolver.query(uri,PROJECTION,null);
  if (cursor == null) {
    return null;
  }
  try {
    if (cursor.getCount() == 0) {
      return null;
    }
    cursor.movetoFirst();
    final String pathname =
        cursor.getString(cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA));
    if (pathname != null) {
      return getEncodedImage(new FileInputStream(pathname),getLength(pathname));
    }
  } finally {
    cursor.close();
  }
  return null;
}
项目:GitHub    文件:JobSchedulerTest.java   
@Test
public void testSchedule_Last_Queued() {
  mJobScheduler.updateJob(fakeEncodedImage(),Consumer.IS_LAST);
  assertTrue(mJobScheduler.scheduleJob());

  EncodedImage encodedImage2 = fakeEncodedImage();
  mJobScheduler.updateJob(encodedImage2,Consumer.IS_LAST);
  assertEquals(JobScheduler.JobState.QUEUED,mJobScheduler.mJobState);
  assertTrue(mJobScheduler.scheduleJob());

  assertEquals(0,mTestscheduledexecutorservice.getPendingCount());
  assertEquals(1,mTestExecutorService.getPendingCount());
  assertEquals(0,mTestJobRunnable.jobs.size());

  mFakeClockForTime.incrementBy(1234);
  mFakeClockForWorker.incrementBy(1234);
  mFakeClockForScheduled.incrementBy(1234);
  assertEquals(1,mTestJobRunnable.jobs.size());
  assertJobsEqual(mTestJobRunnable.jobs.get(0),encodedImage2,Consumer.IS_LAST);
}
项目:GitHub    文件:diskCacheReadProducer.java   
public void produceResults(
    final Consumer<EncodedImage> consumer,final ProducerContext producerContext) {
  final ImageRequest imageRequest = producerContext.getimageRequest();
  if (!imageRequest.isdiskCacheEnabled()) {
    maybeStartInputProducer(consumer,producerContext);
    return;
  }

  producerContext.getListener().onProducerStart(producerContext.getId(),PRODUCER_NAME);

  final CacheKey cacheKey =
      mCacheKeyFactory.getEncodedCacheKey(imageRequest,producerContext.getCallerContext());
  final boolean isSmallRequest = (imageRequest.getCacheChoice() == CacheChoice.SMALL);
  final BuffereddiskCache preferredCache = isSmallRequest ?
      mSmallImageBuffereddiskCache : mDefaultBuffereddiskCache;
  final AtomicBoolean isCancelled = new AtomicBoolean(false);
  final Task<EncodedImage> diskLookupTask = preferredCache.get(cacheKey,isCancelled);
  final Continuation<EncodedImage,Void> continuation =
      onFinishdiskReads(consumer,producerContext);
  diskLookupTask.continueWith(continuation);
  subscribeTaskForRequestCancellation(isCancelled,producerContext);
}
项目:GitHub    文件:JobScheduler.java   
private static boolean shouldProcess(EncodedImage encodedImage,@Consumer.Status int status) {
  // the last result should always be processed,whereas
  // an intermediate result should be processed only if valid
  return BaseConsumer.isLast(status)
      || BaseConsumer.statusHasFlag(status,Consumer.IS_PLACEHOLDER)
      || EncodedImage.isValid(encodedImage);
}
项目:GitHub    文件:AnimatedFactoryV2Impl.java   
@Override
public imagedecoder getGifDecoder(final Bitmap.Config bitmapConfig) {
  return new imagedecoder() {
    @Override
    public CloseableImage decode(
        EncodedImage encodedImage,int length,QualityInfo qualityInfo,ImageDecodeOptions options) {
      return getAnimatedImageFactory().decodeGif(encodedImage,options,bitmapConfig);
    }
  };
}
项目:GitHub    文件:PartialdiskCacheProducer.java   
private void startInputProducer(
    Consumer<EncodedImage> consumerOfPartialdiskCacheProducer,ProducerContext producerContext,CacheKey partialImageCacheKey,@Nullable EncodedImage partialResultFromCache) {
  Consumer<EncodedImage> consumer = new PartialdiskCacheConsumer(
      consumerOfPartialdiskCacheProducer,mDefaultBuffereddiskCache,partialImageCacheKey,mPooledByteBufferFactory,mByteArrayPool,partialResultFromCache);

  mInputProducer.produceResults(consumer,producerContext);
}
项目:GitHub    文件:EncodedMemoryCacheProducerTest.java   
@Before
public void setUp() {
  MockitoAnnotations.initMocks(this);
  mEncodedMemoryCacheProducer =
      new EncodedMemoryCacheProducer(mMemoryCache,mCacheKeyFactory,mInputProducer);
  mPooledByteBuffer1 = mock(PooledByteBuffer.class);
  mPooledByteBuffer2 = mock(PooledByteBuffer.class);
  mFinalImageReference = CloseableReference.of(mPooledByteBuffer1);
  mIntermediateImageReference = CloseableReference.of(mPooledByteBuffer2);
  mFinalImageReferenceClone = mFinalImageReference.clone();
  mFinalEncodedImage = new EncodedImage(mFinalImageReference);
  mIntermediateEncodedImage = new EncodedImage(mIntermediateImageReference);
  mFinalEncodedImageClone = new EncodedImage(mFinalImageReferenceClone);
  List<CacheKey> list = new ArrayList<>();
  list.add(new SimpleCacheKey("http://dummy.uri"));
  mCacheKey = new MultiCacheKey(list);
  when(mCacheKeyFactory.getEncodedCacheKey(mImageRequest,mCallerContext)).thenReturn(mCacheKey);

  when(mMemoryCache.cache(mCacheKey,mFinalImageReference)).thenReturn(mFinalImageReferenceClone);
  when(mProducerContext.getimageRequest()).thenReturn(mImageRequest);
  when(mProducerContext.getCallerContext()).thenReturn(mCallerContext);
  when(mProducerContext.getListener()).thenReturn(mProducerListener);
  when(mProducerListener.requiresExtraMap(mRequestId)).thenReturn(true);
  when(mProducerContext.getId()).thenReturn(mRequestId);
  when(mProducerContext.getLowestPermittedRequestLevel())
      .thenReturn(ImageRequest.RequestLevel.FULL_FETCH);

}
项目:GitHub    文件:ThumbnailSizeCheckerTest.java   
@Test
public void testimageWithInsufficientHeightWhennoresizeOptions() {
  for (int rotation = 0; rotation < 360; rotation += 90) {
    EncodedImage mockImage = mockImage(
        BIG_ENOUGH_SIZE_FOR_NO_RESIZE_OPTIONS,BIG_ENOUGH_SIZE_FOR_NO_RESIZE_OPTIONS - 1,rotation);
    assertFalse(ThumbnailSizeChecker.isImageBigEnough(mockImage,null));
  }
}
项目:GitHub    文件:ProducerSequenceFactory.java   
/**
 * encoded cache multiplex -> encoded cache -> (disk cache) -> (webp transcode)
 * @param inputProducer producer providing the input to the transcode
 * @return encoded cache multiplex to webp transcode sequence
 */
private Producer<EncodedImage> newEncodedCacheMultiplexToTranscodeSequence(
    Producer<EncodedImage> inputProducer) {
  if (WebpSupportStatus.sIsWebpSupportrequired &&
      (!mWebpSupportEnabled || WebpSupportStatus.sWebpBitmapFactory == null)) {
    inputProducer = mProducerFactory.newWebpTranscodeProducer(inputProducer);
  }
  inputProducer = newdiskCacheSequence(inputProducer);
  EncodedMemoryCacheProducer encodedMemoryCacheProducer =
      mProducerFactory.newEncodedMemoryCacheProducer(inputProducer);
  return mProducerFactory.newEncodedCacheKeyMultiplexProducer(encodedMemoryCacheProducer);
}
项目:GitHub    文件:JobScheduler.java   
/**
 * Clears the currently set job.
 *
 * <p> In case the currently set job has been scheduled but not started yet,the job won't be
 * executed.
 */
public void clearJob() {
  EncodedImage oldEncodedImage;
  synchronized (this) {
    oldEncodedImage = mEncodedImage;
    mEncodedImage = null;
    mStatus = 0;
  }
  EncodedImage.closeSafely(oldEncodedImage);
}
项目:GitHub    文件:JobSchedulerTest.java   
@Test
public void testClear() throws Exception {
  EncodedImage encodedImage = fakeEncodedImage();
  mJobScheduler.updateJob(encodedImage,Consumer.IS_LAST);
  mJobScheduler.clearJob();
  assertEquals(null,mJobScheduler.mEncodedImage);
  encodedImage.close();
  assertNull(encodedImage.getByteBufferRef());
}
项目:GitHub    文件:LocalContentUriFetchProducerTest.java   
@Before
public void setUp() throws Exception {
  MockitoAnnotations.initMocks(this);
  mExecutor = new TestExecutorService(new FakeClock());
  mLocalContentUriFetchProducer = new LocalContentUriFetchProducer(
      mExecutor,mContentResolver
  );
  mContentUri = Uri.fromFile(mock(File.class));

  mProducerContext = new SettableProducerContext(
      mImageRequest,mRequestId,mProducerListener,mock(Object.class),ImageRequest.RequestLevel.FULL_FETCH,false,Priority.MEDIUM);
  when(mImageRequest.getSourceUri()).thenReturn(mContentUri);
  doAnswer(
      new Answer() {
        @Override
        public Object answer(InvocationOnMock invocation) throws Throwable {
          mCapturedEncodedImage =
              EncodedImage.cloneOrNull((EncodedImage) invocation.getArguments()[0]);
          return null;
        }
      })
      .when(mConsumer)
      .onNewResult(notNull(EncodedImage.class),anyInt());
}
项目:GitHub    文件:NoOpMediaVariationsIndex.java   
@Override
public void saveCachedVariant(
    String mediaId,ImageRequest.CacheChoice cacheChoice,CacheKey cacheKey,EncodedImage encodedImage) {
  // no-op
}
项目:GitHub    文件:ThumbnailBranchProducerTest.java   
private static EncodedImage mockEncodedImage(int width,int height,int rotationAngle) {
  EncodedImage mockImage = mock(EncodedImage.class);
  when(mockImage.getWidth()).thenReturn(width);
  when(mockImage.getHeight()).thenReturn(height);
  when(mockImage.getRotationAngle()).thenReturn(rotationAngle);
  return mockImage;
}
项目:GitHub    文件:StagingArea.java   
/**
 * Removes key-value from the StagingArea. Both key and value must match.
 * @param key
 * @param encodedImage value corresponding to key
 * @return true if item was removed
 */
public synchronized boolean remove(final CacheKey key,final EncodedImage encodedImage) {
  Preconditions.checkNotNull(key);
  Preconditions.checkNotNull(encodedImage);
  Preconditions.checkArgument(EncodedImage.isValid(encodedImage));

  final EncodedImage oldValue = mMap.get(key);

  if (oldValue == null) {
    return false;
  }

  CloseableReference<PooledByteBuffer> oldRef = oldValue.getByteBufferRef();
  CloseableReference<PooledByteBuffer> ref = encodedImage.getByteBufferRef();
  try {
    if (oldRef == null || ref == null || oldRef.get() != ref.get()) {
      return false;
    }
    mMap.remove(key);
  } finally {
    CloseableReference.closeSafely(ref);
    CloseableReference.closeSafely(oldRef);
    EncodedImage.closeSafely(oldValue);
  }

  logStats();
  return true;
}
项目:GitHub    文件:WebpTranscodeProducer.java   
public WebpTranscodeConsumer(
    final Consumer<EncodedImage> consumer,final ProducerContext context) {
  super(consumer);
  mContext = context;
  mShouldTranscodeWhenFinished = TriState.UNSET;
}
项目:GitHub    文件:BuffereddiskCacheTest.java   
@Before
public void setUp() throws Exception {
  MockitoAnnotations.initMocks(this);
  mCloseableReference = CloseableReference.of(mPooledByteBuffer);
  mEncodedImage = new EncodedImage(mCloseableReference);
  List<CacheKey> keys = new ArrayList<>();
  keys.add(new SimpleCacheKey("http://test.uri"));
  keys.add(new SimpleCacheKey("http://tyrone.uri"));
  keys.add(new SimpleCacheKey("http://ian.uri"));
  mCacheKey = new MultiCacheKey(keys);

  mIsCancelled = new AtomicBoolean(false);
  FakeClock fakeClock = new FakeClock();
  mReadPriorityExecutor = new TestExecutorService(fakeClock);
  mWritePriorityExecutor = new TestExecutorService(fakeClock);

  when(mBinaryResource.openStream()).thenReturn(mInputStream);
  when(mBinaryResource.size()).thenReturn(123L);
  when(mByteBufferFactory.newByteBuffer(same(mInputStream),eq(123)))
      .thenReturn(mPooledByteBuffer);

  mockStatic(StagingArea.class);
  when(StagingArea.getInstance()).thenReturn(mStagingArea);

  mBuffereddiskCache = new BuffereddiskCache(
      mFileCache,mByteBufferFactory,mPooledByteStreams,mReadPriorityExecutor,mWritePriorityExecutor,mImageCacheStatsTracker);
}
项目:GitHub    文件:LocalContentUriThumbnailFetchProducerTest.java   
private void assertConsumerReceivesImage() {
  ArgumentCaptor<EncodedImage> resultCaptor = ArgumentCaptor.forClass(EncodedImage.class);
  verify(mConsumer).onNewResult(resultCaptor.capture(),eq(Consumer.IS_LAST));

  assertNotNull(resultCaptor.getValue());
  assertEquals(THUMBNAIL_FILE_SIZE,resultCaptor.getValue().getSize());

  verifyNoMoreInteractions(mConsumer);
}
项目:GitHub    文件:ResizeAndRotateProducer.java   
public ResizeAndRotateProducer(
    Executor executor,PooledByteBufferFactory pooledByteBufferFactory,boolean resizingEnabled,Producer<EncodedImage> inputProducer,boolean useDownsamplingRatio) {
  mExecutor = Preconditions.checkNotNull(executor);
  mPooledByteBufferFactory = Preconditions.checkNotNull(pooledByteBufferFactory);
  mResizingEnabled = resizingEnabled;
  mInputProducer = Preconditions.checkNotNull(inputProducer);
  mUseDownsamplingRatio = useDownsamplingRatio;
}
项目:GitHub    文件:ProducerFactory.java   
public EncodedMemoryCacheProducer newEncodedMemoryCacheProducer(
    Producer<EncodedImage> inputProducer) {
  return new EncodedMemoryCacheProducer(
      mEncodedMemoryCache,inputProducer);
}

ConvenientImagePicker iOS 简洁优雅的 imagepicker

ConvenientImagePicker iOS 简洁优雅的 imagepicker

ConvenientImagePicker 介绍

ConvenientimagePicker 精准的手势交互,简洁优雅的界面,可以弹出选择系统相册照片,或者提供制定图片。

ConvenientImagePicker 官网

https://github.com/CLOXnu/ConvenientImagePicker

我们今天的关于docker 删除镜像的时候报错 --image has dependent child imagesdocker删除镜像失败的分享就到这里,谢谢您的阅读,如果想了解更多关于25.week4 docker build 也就是创建自己的image 上传image到dockerhub 从dockerhub下载images、android – FragmentStatePagerAdapter with ChildFragmentManager – FragmentManagerImpl.getFragment导、com.facebook.imagepipeline.image.EncodedImage的实例源码、ConvenientImagePicker iOS 简洁优雅的 imagepicker的相关信息,可以在本站进行搜索。

本文标签: