0

루트 액티비티에는 클릭 한 항목을 기반으로 액티비티를로드하는 ListView이있는 계층 적 애플리케이션이 있습니다. 그 활동은 차례로 ListView 선택에 기초한 활동을로드합니다.현재 작업을 종료하고 새 작업을 시작하는 데 걸리는 시간을 줄일 수 있습니까? (안드로이드)

내 전환이 매우 빠르며 전환 애니메이션이 끝나는 즉시 활동 B가로드됩니다. 가장 느린 부분은 이고 다음 활동으로의 전환은입니다.

항목을 클릭하면 전환 애니메이션이 시작되기 전에 30 초가 소요됩니다. 이 지연의 원인은 무엇입니까? onBackPressed을 사용하여 상위 활동 (single_instance_top이 아닌 새 인스턴스 또는 재생성 됨)으로 이동할 때도 동일한 지연이 발생합니다. 사용자가 다음 화면이로드되기 전에 선택 항목의 시각 효과를 볼 수 있도록 지연 기능이 내장되어 있습니까?

여기가 내 활동 중 하나입니다. onItemClick 메서드는 내 ListView 어댑터에서 호출됩니다.이 어댑터의 onClick 메서드는 보이는 메서드를 호출하지만 아무것도 수행하지 않습니다. 어떤 제안?

public class Activity_Course extends ActionBarActivity { 

    static final String COURSE_ID = "my.COURSE_ID"; 
    public int courseId; 

    public static boolean needsRefresh = false; 
    public static boolean isRecreated = false; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left); 
     setContentView(R.layout.activity_course); 


     if (savedInstanceState == null) { 
      Handler h = new Handler(); 
      h.post(new Runnable(){ 
       public void run(){ 
        // do your heave tasks 
        Intent intent = getIntent(); 
        courseId = intent.getIntExtra(MainFragment.COURSE_ID, 0); 
        getSupportFragmentManager().beginTransaction() 
        .add(R.id.course_activity_frame, new CourseActivityFragment()).commit(); 
       } 
      }); 
     } else { 
      courseId = savedInstanceState.getInt(COURSE_ID); 
      Activity_Course.isRecreated = true; 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.course, menu); 
     if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) {     
      menu.findItem(R.id.menu_overflow).setIcon(R.drawable.ic_menu_moreoverflow_normal_holo_light); 
     } 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.edit_course_menu_item) { 
      Intent i = new Intent(this, Activity_EditCourse.class); 
      i.putExtra(COURSE_ID, courseId); 
      startActivity(i); 
     } else if(id == R.id.edit_course_gpa_menu_item){ 
      Intent i = new Intent(this, Activity_EditCourseGPA.class); 
      i.putExtra(COURSE_ID, courseId); 
      startActivity(i); 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    /** 
    * A placeholder fragment containing a simple view. 
    */ 
    public static class CourseActivityFragment extends Fragment { 

     public final static String GRADE_ID = "my.GRADE_ID"; 
     public final static String CAT_ID = "my.CAT_ID"; 
     public final static String COURSE_ID = "my.COURSE_ID"; 
     public final static String CAT_STRING = "my.CAT_STRING"; 
     public final static String COURSE_STRING = "my.COURSE_STRING"; 
     public final static String SEMESTER_STRING = "my.SEMESTER_STRING"; 

     View rootView; 
     int courseId; 
     DBAdapter db; 
     ScaledGradeHolder gholder; 
     ProgressBar pbar; 
     ListView categoryListView; 
     TextView percentAvg_tv; 
     TextView gpa_tv; 
     TextView letterGrade_tv; 
     Activity curActivity; 
     CourseActivityFragment curFrag; 
     int gradeColor; 
     Course course; 
     Adapter_CategoryList catAdapter; 
     public final static String CATEGORY_ID = "my.CATEGORY_ID"; 

     public ArrayList<Category> catList = new ArrayList<Category>(); 

     public CourseActivityFragment() { 
     } 

     @Override 
     public void onCreate(Bundle savedInstanceState){ 
      super.onCreate(savedInstanceState); 
      setRetainInstance(true); 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      rootView = inflater.inflate(R.layout.fragment_course, 
        container, false); 

      db = new DBAdapter(this.getActivity()); 
      curActivity = this.getActivity(); 
      curFrag = this; 

      if (savedInstanceState != null) { 
       courseId = savedInstanceState.getInt(COURSE_ID); 

       if(catAdapter != null){ 
        catAdapter.clear(); 
        catList.clear(); 
       } 

      } else { 
       courseId = ((Activity_Course) this.getActivity()).courseId; 
      } 


      if(Activity_Course.isRecreated){ 
       if(catAdapter != null) 
        catAdapter.clear(); 
       Activity_Course.isRecreated = false; 
      } 


      db.open(); 
      course = db.getCourse(courseId); 
      gholder = db.getScaledCourseGradeHolder(courseId); 
      db.close(); 

      setViews(); 

      setListData(); 

      Resources res = getResources(); 
      categoryListView = (ListView) rootView.findViewById(R.id.cat_list_view); 

//     Applies the adapter to populate the ListView 
      catAdapter = new Adapter_CategoryList(curActivity, catList, res, curFrag); 
      categoryListView.setAdapter(catAdapter); 
      pbar.setVisibility(View.GONE); 







      return rootView; 
     } 

     public void setListData() 
     { 
      db.open(); 
      Category[] gt = db.getCategoriesInCourse(courseId); 
      db.close(); 
      if(gt!=null){ 
       for(int i = 0; i < gt.length; i++) { 
        catList.add(gt[i]); 
       } 
      } 
     } 

     public void setViews(){ 
      // Set header info 
      pbar = (ProgressBar)rootView.findViewById(R.id.progressBar1); 
      TextView header = (TextView)rootView.findViewById(R.id.course_header); 
      header.setText(course.getTitle()); 
      ((TextView) rootView.findViewById(R.id.semester_header)).setText(course.getSemesterString()); 

      setGradeSummaryViews(); 

//   Set column headers of the gradeType ListView 
      LinearLayout catHeader = (LinearLayout) rootView.findViewById(R.id.linLayCatheader); 
      TextView tv = (TextView)catHeader.findViewById(R.id.category_column); 
      TextView tv2 = (TextView)catHeader.findViewById(R.id.weight_column); 
      TextView tv3 = (TextView)catHeader.findViewById(R.id.gradecount_column); 
      TextView tv4 = (TextView)catHeader.findViewById(R.id.percentage_column); 
      tv.setText(R.string.cat_header); 
      tv2.setText(R.string.weight_header); 
      tv3.setText(R.string.count_header); 
      tv4.setText(R.string.percent_header); 
     } 

     public void setGradeSummaryViews(){ 
      db.open(); 
      gholder = db.getScaledCourseGradeHolder(courseId); 
      this.getActivity().setTitle(db.getCourse(courseId).getTitle()); 
      db.close(); 

      gradeColor = gholder.getColorId(); 

      // Set gpa 
      gpa_tv = (TextView) rootView.findViewById(R.id.gpaGradeTextView); 
      gpa_tv.setText(gholder.getGpaGradeString()); 
      gpa_tv.setTextColor(gradeColor); 

      // Set percent average 
      percentAvg_tv = (TextView) rootView.findViewById(R.id.percentTextView); 
      percentAvg_tv.setText(gholder.getNumberGradeStringPercent()); 
      percentAvg_tv.setTextColor(gradeColor); 

      // Set letter grade 
      letterGrade_tv = (TextView) rootView.findViewById(R.id.letterGradeTextView); 
      letterGrade_tv.setText(gholder.getLetterGrade()); 
      letterGrade_tv.setTextColor(gradeColor); 
     } 

     public void onItemClick(int position){ 

       Intent i = new Intent(this.getActivity(), Activity_Category.class); 
       i.putExtra(CATEGORY_ID, catAdapter.getItem(position).getCategoryId()); 
       i.putExtra(MainFragment.COURSE_ID, courseId); 
       Activity_Category.catId = catAdapter.getItem(position).getCategoryId(); 
       startActivity(i); 


      } 

     @Override 
      public void onResume(){ 
       super.onResume(); 
       if(categoryListView == null) 
        return; 
       int cnt = categoryListView.getChildCount(); 
       for(int i = 0; i < cnt; i++){ 
        categoryListView.getChildAt(i).setBackgroundColor(0x00000000); 
       } 
       //coursesListView.setAdapter(courseAdapter); 
      } 

     @Override 
     public void onStart(){ 
      super.onStart(); 
      if(Activity_Course.needsRefresh){ 
        catList.clear(); 
        setListData(); 
        catAdapter.notifyDataSetChanged(); 
        setGradeSummaryViews(); 
        Activity_Course.needsRefresh = false; 
       } 
     } 

     @Override 
      public void onSaveInstanceState(Bundle outState){ 
       super.onSaveInstanceState(outState); 
       outState.putInt(COURSE_ID, courseId); 
      } 

    } 

    @Override 
    public void onSaveInstanceState(Bundle savedInstanceState){ 
     // Save current CourseId 
     savedInstanceState.putInt(COURSE_ID, courseId); 

     // Call superclass to save view hierarchy state 
     super.onSaveInstanceState(savedInstanceState); 
    } 

    @Override 
    public void onBackPressed() { 
     super.onBackPressed(); 
     overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right); 
    } 

    @Override 
    public boolean onNavigateUp() { 
     boolean x = super.onSupportNavigateUp(); 
     overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right); 
     return x; 
    } 

} 
+0

추적보기를 시도하고 시간이 어디인지 확인 했습니까? – Panther

+0

아직 그 기능을 사용하지 않았습니다 ... 어떻게 사용합니까? – NSouth

+0

'traceview'에서'timeline'을 사용하는 법을 배워야합니다. 그러나 처음에는 시간의 흐름을 고려하고 실제로 더 많은 시간을 소비하는 방법을 확인하는 방법의 시작과 끝에서 로그 시간을 고려할 수 있습니다. – Panther

답변

1

활동 간의 "기본"전환을 변경하고 매우 빠른 전환을 사용할 수 있습니다. 참조 :

example은 또한 당신이 onCreateonResume 적은 일을 할 수 있도록 로딩 시간이 매우 짧은하고 잠시 후로드 및 데이터의 작성을 시작합니다 - 핸들러 (50 ~ 100 밀리 초).