根據writeToParcel()的原始碼,應該是會先write一個string型別的,為什么呼叫writeToParcel()后parcel.readString()讀出來的為空呢?
原始碼:
SurfaceView sv = (SurfaceView) findViewByID(R.id.videoview);
Parcel request = Parcel.obtain();
sv.getHolder().getSurface().writeToParcel(request, 0);
request.setDataPosition(0);
Log.i(TAG, "read string" + request.readString());
uj5u.com熱心網友回復:
public class Surface implements Parcelable
想要讀取Parce的內容,必須要要先在Parcel中write。
你的Parcel request = Parcel.obtain();只初始化了,沒有寫入任何內容,request.readString()肯定為空咯。
你需要這個request.writeString("");
uj5u.com熱心網友回復:
但是Surface的writeToParcel介面中不是已經寫入一個string了嗎?呼叫完writeToParcel之后為什么不能獲取這個string?
uj5u.com熱心網友回復:
那是因為底層已經read過了,把write進去的內容讀取并釋放了uj5u.com熱心網友回復:
那這個地方writeToParcel介面的功能是什么呢?呼叫完之后parcel中還是空的。。。我這里是想將surface物件封裝到parcel中,然后通過寫好的jni介面將parcel傳到我這邊的native層,不想新增jni介面傳遞這個surface。
但是我現在就是在java層呼叫完writeToParcel之后,這個parcel好像就是空的,更不用說native層了
uj5u.com熱心網友回復:
jni層的surface,不是直接可以轉換成ANativeWindow 嗎?uj5u.com熱心網友回復:
這里的writeToParcel可以攜帶一些自定義的資料吧
uj5u.com熱心網友回復:
正常通過介面傳參jobject surface或者通過GetFieldID確實可以拿到java層的surface物件,但是我這里想要用parcel傳遞surface需要怎么做呢?轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/262690.html
標籤:Android
上一篇:微信小程式正則如何取
