AsyncTask를 사용하여 조각에 비디오를로드하는 동안 원하는 성능을 얻는 데 어려움을 겪고 있습니다.
나는 UI 스레드를 묶는 것 같지만 어디에 있는지 이해하지 못하고 메모리 누수가 보이지 않습니다. 나는 실행을 시도 AyncTask
에서 onAttach()
, OnCreate()
, onCreateView()
, 및setUserVisibleHint()
나는 또한 설정 및 사용을 시도했습니다 onPreparedListener()
이러한 모든 시도에서 VideoFragment
라이프 사이클이 호출 될 때 여전히 성능 지연이 발생합니다 . 지연으로 인해 raw
폴더 에서 비디오를로드하기 때문에 연결을 의미하지는 않습니다 .
그래서에서 그것을 전환으로 IntroFragment
에 DetailsFragment
, VideoFragment
의 생명주기 (onAttach,에서 onCreate, onCreateView 등) 떨어져 화재, 이것은 내가 "지연"을 참조하십시오 곳 직전이다 DetailsFragment
보이게된다.
FragmentsHolder
public abstract class FragmentsHolder extends FragmentActivity{
@Override
final protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
mPagerAdapter = new PagerIntroAdapter(super.getSupportFragmentManager(), fragments);
pager = (ViewPager) findViewById(R.id.view_pager);
pager.setAdapter(this.mPagerAdapter);
}
}
FirstSequence
public class FirstSequence extends FragmentsHolder {
@Override
public void init(Bundle savedInstanceState) {
addSlide(IntroFragment.newInstance("First String","Second String",
R.drawable.intro_fragment_drawable, 0, 0, 0, Color.parseColor("#4798af"), 1));
addSlide(DetailsFragment.newInstance("First Details String","Second Details String",
R.drawable.details_fragment_drawable, 0, 0, 0, Color.parseColor("#4798af"), 1));
addSlide(FourImagesFragment.newInstance("Title String","Instruction String", R.drawable.image_1, R.drawable.image_2, R.drawable.image_3,
R.drawable.image_4, Color.parseColor("#4798af"), 1));
addSlide(VideoFragment.newInstance(R.raw.my_video,"Video title string","Video subtitle string",
0, 0, 0, 0, Color.parseColor("#4798af"), 1));
비디오 조각
public class VideoFragment extends Fragment{
View hackyView;
private Handler subt_text;
private static final String ARG_VIDEO_TO_LOAD = "videotoload";
...
public static VideoFragment newInstance(int videoToLoad, String title, String subTitle,int imageDrawable1,int imageDrawable2,int imageDrawable3,int imageDrawable4,int bgColor, int progressCounter){
VideoFragment sampleSlide = new VideoFragment();
Bundle args = new Bundle();
args.putInt(ARG_VIDEO_TO_LOAD,videoToLoad);
...
return sampleSlide;
}
private int videoToLoad, ....;
private String title, ...;
@Override
public void onAttach(Context context) {
super.onAttach(context);
System.out.println("VideoFragment OnAttach ");
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//get args
if (getArguments() != null && getArguments().size() != 0) {
videoToLoad = getArguments().getInt(ARG_VIDEO_TO_LOAD);
...
}
System.out.println("VideoFragment OnCreate ");
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_video, container, false);
hackyView = v;
//new loadVideoTask().execute();
System.out.println("VideoFragment OnCreateView ");
return vView;
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(isVisibleToUser){
new loadVideoTask().execute();
}else {
}
}
private class loadVideoTask extends AsyncTask<Object, Object, Object> {
ProgressDialog pDialog;
@Override
protected void onPreExecute() {
System.out.println("AsyncTask load onPreExecute ");
DialogMessage = "Loading Video";
pDialog = new ProgressDialog(getActivity());
pDialog.setMessage(DialogMessage);
pDialog.show();
}
@Override
protected Object doInBackground(Object... params) {
slideUpAnim = AnimationUtils.loadAnimation(getActivity(), R.anim.slide_up);
cv1 = (CardView) hackyView.findViewById(R.id.cv1);
//Initialize the rest of the Views, animations, etc
...
return hackyView;
}
protected void onPostExecute(Object result) {
//process result load video
loadVideo();
pDialog.dismiss();
}
}
private void loadVideo() {
subt_text = new Handler();
vid.setVideoURI(Uri.parse(urlpath));
vid.requestFocus();
vid.seekTo(seekto);
//set all views
}
}
프래그먼트, 라이프 사이클 등에 대한 많은 질문을 읽었지만 구현에서 내가 잘못하고있는 것을 이해하는 데 도움이되도록 이러한 답변을 사용하는 방법을 알아낼 수 없습니다.
검은 색 화면이 깜빡이던 프래그먼트 사이를 전환 할 때 보았던 "지연"이 ..
<SurfaceView
android:layout_width="0px"
android:layout_height="0px" />
조각의 부모 활동의 xml에. 제 경우에는 FragmentHolder
's xml입니다. 왜 이것이 여기에서 작동하는지 설명하는 더 많은 링크와 답변을 찾았습니다. VideoView 내부 조각으로 인해 검은 화면이 깜박입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다