2016-10-03 3 views
0

私のアプリに3 activitiesがあります。Androidのアクティビティに負荷がかかる

左から右にスワイプしたときの2番目のアクティビティは、他のアクティビティを示します。中心のアクティビティ(2番目)にはカメラが背景として表示されます(背景にはカメラが表示されます)。

このactivityから別のものにナビゲートすると、それらは高速で開きますが、他のアクティビティからこの1つに戻るには時間がかかります。

カメラの搭載時間を最適化するにはどうすればよいですか?

MainActivity.javaは// JUST CAMERAのバックグラウンドを持って

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 //ちょうどあなたが活動のUIにカメラを搭載している活動のジェスチャーに

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

あなたの携帯電話やカメラを使用しているので、カメラが閉じていて、他のアクティビティがポップアップしたり、新しいアクティビティが非常に複雑なUIを持ち、GPUがデータを読み込むのに時間がかかります。さらに、あなたのデバイスはラム不足の可能性がありますので、新しいアクティビティをロードする前にいくつかのメモリを解放して再取得します。 あなたのコードとエラーコード(もしあれば)、あなたのXMLも入れてください。 –

+1

このアクティビティとそのアクティビティからは何もわかりません。最初のアクティビティから2番目のアクティビティにスライドすることで、どのように動くのかを示す必要がありますか?何をしているの?その後、あなたはどのように戻ってくるのかを示しますか?また、いくつかのログでは、どの部分が長くかかっているかを判断することができます –

+0

@ th3pat3lアプリケーションのテスト中にログを表示する方法は? – Moudiz

答えて

0

を変更するのTextViewと強打を持っています。カメラを非同期に読み込みます。

+0

どうすればいいですか? – nic

関連する問題