wordpress怎么添加ico宁波网站排名优化seo
wordpress怎么添加ico,宁波网站排名优化seo,双语网站建设,wordpress 修改代码傅撂食浪? 本文将介绍基于 SurfaceControlViewHost 实现跨进程渲染普通 View 和 GlSurfaceView#xff0c;力求用最简单的 Demo#xff0c;介绍 SurfaceControlViewHost 的应用#xff0c;方便读者轻松扣出核心代码应用到自己的业务中。
? 核心代码片段如下。
? 1#x…傅撂食浪? 本文将介绍基于 SurfaceControlViewHost 实现跨进程渲染普通 View 和 GlSurfaceView力求用最简单的 Demo介绍 SurfaceControlViewHost 的应用方便读者轻松扣出核心代码应用到自己的业务中。? 核心代码片段如下。? 1服务端public SurfaceControlViewHost.SurfacePackage getSurfacePackage(int displayId, IBinder hostToken, int width, int height) {// 创建SurfaceControlViewHostDisplay display mContext.getSystemService(DisplayManager.class).getDisplay(displayId);mSurfaceControlViewHost new SurfaceControlViewHost(mContext, display, hostToken);// 创建要渲染的ViewmView new CustomView(mContext);// 将View附加到SurfaceControlViewHostmSurfaceControlViewHost.setView(mView, width, height);SurfacePackage surfacePackage mSurfaceControlViewHost.getSurfacePackage();return surfacePackage;}? 2客户端IBinder hostToken mSurfaceView.getHostToken();SurfaceControlViewHost.SurfacePackage surfacePackage mRemoteRender.getSurfacePackage(0, hostToken, 1000, 2000);mSurfaceView.setChildSurfacePackage(surfacePackage);? 本文案例项目结构如下完整资源见 → 基于SurfaceControlViewHost实现跨进程渲染。img2 AIDL 配置? Android 跨进程通信可以使用 AIDL 或 messenger它们本质都是 Binder本文使用 AIDL 实现跨进程通信。? 1aidl 文件// IRemoteRender.aidlpackage com.zhyan8.remoterender;import android.view.SurfaceControlViewHost.SurfacePackage;import android.os.IBinder;interface IRemoteRender {SurfacePackage getSurfacePackage(int displayId, IBinder hostToken, int width, int height);}? 2gradle 配置sourceSets {main {aidl.srcDirs [src/main/aidl]}}buildFeatures.aidl true? 3manifest 配置? 客户端配置如下。? 服务端配置如下。android:name.RemoteRenderServiceandroid:exportedtrueandroid:name.RemoteGLRenderServiceandroid:exportedtrue3 客户端? MainActivity.javapackage com.zhyan8.client;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.ServiceConnection;import android.os.Bundle;import android.os.IBinder;import android.os.RemoteException;import android.util.Log;import android.view.SurfaceControlViewHost.SurfacePackage;import android.view.SurfaceView;import android.view.View;import androidx.appcompat.app.AppCompatActivity;import com.zhyan8.remoterender.IRemoteRender;public class MainActivity extends AppCompatActivity {private static final String TAG MainActivity;private IRemoteRender mRemoteRender;private IBinder mService;private SurfaceView mSurfaceView;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mSurfaceView findViewById(R.id.surface_view);startService();}public void onClickDraw(View view) {try {IBinder hostToken mSurfaceView.getHostToken();SurfacePackage surfacePackage mRemoteRender.getSurfacePackage(0, hostToken, 1000, 2000);mSurfaceView.setChildSurfacePackage(surfacePackage);} catch (RemoteException e) {e.printStackTrace();}}Overrideprotected void onDestroy() {super.onDestroy();unbindService(mConnection);}private void startService() {Log.d(TAG, startService);Intent intent new Intent(com.zhyan8.remoterender.IRemoteRender);//intent.setPackage(com.zhyan8.service); // 渲染普通View的服务intent.setPackage(com.zhyan8.glservice); // 基于OpenGL ES渲染的服务bindService(intent, mConnection, Context.BIND_AUTO_CREATE);}private void clearBind() {Log.d(TAG, clearBind);if (mService ! null) {mService.unlinkToDeath(mDeathRecipient, 0);}mRemoteRender null;mService null;}private ServiceConnection mConnection new ServiceConnection() {Overridepublic void onServiceConnected(ComponentName name, IBinder service) {Log.d(TAG, onServiceConnected);mRemoteRender IRemoteRender.Stub.asInterface(service);mService service;try {mService.linkToDeath(mDeathRecipient, 0);} catch (RemoteException e) {Log.e(TAG, e e.getMessage());}}Overridepublic void onServiceDisconnected(ComponentName name) {Log.d(TAG, onServiceDisconnected);clearBind();}};private IBinder.DeathRecipient mDeathRecipient new IBinder.DeathRecipient() {Overridepublic void binderDied() {Log.d(TAG, binderDied);clearBind();}};}? activity_main.xmlandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationverticalandroid:padding16dpandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:textdrawandroid:onClickonClickDraw/android:idid/surface_viewandroid:layout_width1000pxandroid:layout_height2000pxandroid:layout_gravitycenter/4 跨进程渲染普通 View? RemoteRenderService.javapackage com.zhyan8.service;import android.app.Service;import android.content.Context;import android.content.Intent;import android.hardware.display.DisplayManager;import android.os.Handler;import android.os.IBinder;import android.os.Looper;import android.util.Log;import android.view.Display;import android.view.SurfaceControlViewHost;import android.view.SurfaceControlViewHost.SurfacePackage;import android.view.ViewGroup;import android.widget.ImageView;import com.zhyan8.remoterender.IRemoteRender;import java.util.concurrent.CountDownLatch;public class RemoteRenderService extends Service {private static final String TAG RemoteRenderService;private SurfaceControlViewHost mSurfaceControlViewHost;private ImageView mImageView;private Handler mHandler new Handler(Looper.getMainLooper());Overridepublic void onCreate() {super.onCreate();Log.i(TAG, onCreate);}Overridepublic IBinder onBind(Intent intent) {Log.i(TAG, onBind);return mBinder;}Overridepublic void onDestroy() {super.onDestroy();Log.i(TAG, onDestroy);if (mSurfaceControlViewHost ! null) {mSurfaceControlViewHost.release();}}private final IRemoteRender.Stub mBinder new IRemoteRender.Stub() {Overridepublic SurfacePackage getSurfacePackage(int displayId, IBinder hostToken, int width, int height) {Log.i(TAG, getSurfacePackage, displayId displayId , hostToken hostToken , width width , height height);final SurfacePackage[] result new SurfaceControlViewHost.SurfacePackage[1];final CountDownLatch latch new CountDownLatch(1);mHandler.post( () - {// 创建SurfaceControlViewHostContext context getBaseContext();Display display context.getSystemService(DisplayManager.class).getDisplay(displayId);mSurfaceControlViewHost new SurfaceControlViewHost(context, display, hostToken);// 创建要渲染的内容mImageView new ImageView(RemoteRenderService.this);mImageView.setLayoutParams(new ViewGroup.LayoutParams(width, height));mImageView.setScaleType(ImageView.ScaleType.FIT_XY);mImageView.setImageResource(R.drawable.girl);// 将视图附加到SurfaceControlViewHostmSurfaceControlViewHost.setView(mImageView, width, height);result[0] mSurfaceControlViewHost.getSurfacePackage();latch.countDown();});try {latch.await(); // 等待主线程完成操作return result[0];} catch (InterruptedException e) {Log.i(TAG, getSurfacePackage, e e.getMessage());}return null;}};}? 运行效果如下。