루트 액티비티에는 클릭 한 항목을 기반으로 액티비티를로드하는 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;
}
}
추적보기를 시도하고 시간이 어디인지 확인 했습니까? – Panther
아직 그 기능을 사용하지 않았습니다 ... 어떻게 사용합니까? – NSouth
'traceview'에서'timeline'을 사용하는 법을 배워야합니다. 그러나 처음에는 시간의 흐름을 고려하고 실제로 더 많은 시간을 소비하는 방법을 확인하는 방법의 시작과 끝에서 로그 시간을 고려할 수 있습니다. – Panther