0
我在我的應用程序中有3 activities
。Android活動需要時間加載
第二個向左/向右滑動顯示其他活動。中心活動(第二個)具有相機作爲背景(背景顯示相機看到的內容)。
當我從這個activity
導航到另一個,他們打開得很快,但從其他活動回來這個需要時間。
如何優化相機加載時間?
MainActivity.java //只是有一個攝像頭背景
package com.example.nick.myapplication;
import android.view.GestureDetector;
import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.support.v4.view.GestureDetectorCompat;
import android.support.v7.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
String TAG = "TAG";
private GestureDetectorCompat gestureDetectorCompat; // ####################################
private Camera mCamera;
private CameraPreview mPreview;
private boolean checkCameraHardware(Context context) {
if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
// this device has a camera
return true;
} else {
// no camera on this device
return false;
}
}
public static Camera getCameraInstance() {
Camera c = null;
try {
c = Camera.open(0); // attempt to get a Camera instance
} catch (Exception e) {
// Camera is not available (in use or does not exist)
}
return c; // returns null if camera is unavailable
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gestureDetectorCompat = new GestureDetectorCompat(this, new MyGestureListener());
mCamera = getCameraInstance();
// Create our Preview view and set it as the content of our activity.
mPreview = new CameraPreview(this, mCamera);
FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
preview.addView(mPreview);
}
@Override // ############################################################# {{{
public boolean onTouchEvent(MotionEvent event) {
this.gestureDetectorCompat.onTouchEvent(event);
return super.onTouchEvent(event);
}
class MyGestureListener extends GestureDetector.SimpleOnGestureListener {
//handle 'swipe left' action only
@Override
public boolean onFling(MotionEvent event1, MotionEvent event2,
float velocityX, float velocityY) {
/*
Toast.makeText(getBaseContext(),
event1.toString() + "\n\n" +event2.toString(),
Toast.LENGTH_SHORT).show();
*/
if(event2.getX() < event1.getX()){
Toast.makeText(getBaseContext(),
"Swipe left - startActivity()",
Toast.LENGTH_SHORT).show();
//switch another activity
Intent intent = new Intent(
MainActivity.this, Main3Activity.class);
startActivity(intent);
}
if(event2.getX() > event1.getX()){
Toast.makeText(getBaseContext(),
"Swipe left - startActivity()",
Toast.LENGTH_SHORT).show();
//switch another activity
Intent intent = new Intent(
MainActivity.this, Main4Activity.class);
startActivity(intent);
}
return true;
}
} // ############################################################# }}}
Main3Activity.java //只是有一個TextView和滑動即可切換活動的姿態
package com.example.nick.myapplication;
import android.support.v4.view.GestureDetectorCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.support.v4.view.GestureDetectorCompat;
import android.support.v7.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.MotionEvent;
import android.widget.FrameLayout;
import android.widget.Toast;
public class Main3Activity extends AppCompatActivity {
private GestureDetectorCompat gestureDetectorCompat;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
gestureDetectorCompat = new GestureDetectorCompat(this, new MyGestureListener());
}
@Override // ############################################################# {{{
public boolean onTouchEvent(MotionEvent event) {
this.gestureDetectorCompat.onTouchEvent(event);
return super.onTouchEvent(event);
}
class MyGestureListener extends GestureDetector.SimpleOnGestureListener {
//handle 'swipe left' action only
@Override
public boolean onFling(MotionEvent event1, MotionEvent event2,
float velocityX, float velocityY) {
if(event2.getX() > event1.getX()){
//switch another activity
Intent intent = new Intent(
Main3Activity.this, MainActivity.class);
startActivity(intent);
}
return true;
}
} // ############################################################# }}}
}
}
它可能取決於您的手機,或者因爲您使用相機,那麼您的相機正在關閉,您的其他活動彈出或您的新活動有一個非常複雜的用戶界面,GPU需要大量的時間來加載數據。此外,您的設備可能不在內存中,因此在加載您的新活動之前,它會釋放並重新獲取一些內存.... 將您的代碼以及錯誤代碼(如果有)與您的xml一起使用。 –
這個活動,那個活動並沒有告訴我們任何東西。你必須通過滑動顯示你如何從第一次活動到第二次活動?你在做什麼?然後展示你如何回來?還有一些日誌,所以我們可以確定什麼部分需要很長時間 –
@ th3pat3l如何在測試應用程序時顯示日誌? – Moudiz