2016-10-03 55 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

相关问题