2016-10-03 60 views
0

我在我的應用程序中有3 activitiesAndroid活動需要時間加載

第二個向左/向右滑動顯示其他活動。中心活動(第二個)具有相機作爲背景(背景顯示相機看到的內容)。

當我從這個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; 
    } 
} // #############################################################  }}} 
} 
} 
+0

它可能取決於您的手機,或者因爲您使用相機,那麼您的相機正在關閉,您的其他活動彈出或您的新活動有一個非常複雜的用戶界面,GPU需要大量的時間來加載數據。此外,您的設備可能不在內存中,因此在加載您的新活動之前,它會釋放並重新獲取一些內存.... 將您的代碼以及錯誤代碼(如果有)與您的xml一起使用。 –

+1

這個活動,那個活動並沒有告訴我們任何東西。你必須通過滑動顯示你如何從第一次活動到第二次活動?你在做什麼?然後展示你如何回來?還有一些日誌,所以我們可以確定什麼部分需要很長時間 –

+0

@ th3pat3l如何在測試應用程序時顯示日誌? – Moudiz

回答

0

您正在加載相機活動UI 。異步加載相機。

+0

我該怎麼做? – nic

相關問題