총 게시물 39,224건, 최근 0 건 안내 RSS 글쓰기
이전글  다음글  목록 글쓰기
[안드로이드]

시작하는데 14초나 걸리네요. 이유가 뭘까요?

글쓴이 : 안드촘 날짜 : 2018-01-08 (월) 22:13 조회 : 2957
글주소 : http://www.androidside.com/B49/169083
 
  데브렉 자바마스터
JAVA, JSP, 스트럿츠, 스프링, MVC, 온라인 자바 동영상 교육과정.
www.devlec.com
  (취업) KGITBANK학원
겨울방학이벤트, 교육상담신청, KG아이티뱅크신규접수, C언어, 자바, 정보보안학원
m-kgitbank.co.kr
  KGITBANK학원 김종수
상담예약접수처, 중고등학생수시대비, 대학전공, 국비지원취업, 정보보안전문가학원.
www.hrditbank.co.kr
신청하기


안드로이드, 자바 그리고 다양한 질문에 대해 성실히 답해드립니다. Q&A Jang

다음과 같이 같단한 앱을 짰는데요. 위쪽에 있는 텍스트뷰에 숫자를 입력하면

그아래에 공식에 의한 계산결과가 나오고,

그 아래에 그 결과를 계기판 바늘같은 형식으로 보여주는 건데요.

코딩 초보라서... 

빨리 실행되게 하는 방법이 뭐가 있을까요?

<<<<< MainActivity.java >>>>>

import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {
    EditText mWeightEditText;
    EditText mHeightEditText;
    TextView mBmiTextView;
    float floatWeight;
    float floatHeight;
    static float floatBmi = 0f;
    String strBmi;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

        mWeightEditText = (EditText)findViewById(R.id.weightEditText);
        mHeightEditText = (EditText)findViewById(R.id.heightEditText);
        mBmiTextView = (TextView)findViewById(R.id.bmiTextView);

        mWeightEditText.addTextChangedListener(mWatcher);
        mHeightEditText.addTextChangedListener(mWatcher);
    }

    TextWatcher mWatcher = new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            if (   ( mWeightEditText.getText().toString().length()>0 )   &&   ( mHeightEditText.getText().toString().length()>0 )   ) {
                if ( mHeightEditText.getText().toString().equals("0") ) {

                } else {
                    floatWeight = Float.parseFloat(mWeightEditText.getText().toString());
                    floatHeight = Float.parseFloat(mHeightEditText.getText().toString());

                    floatBmi = (floatWeight / (floatHeight/100f)) / (floatHeight/100f);
                    strBmi = String.format("%.1f", floatBmi);

                    mBmiTextView.setText(strBmi);

                }
            } else {
                mBmiTextView.setText("");
                floatBmi = 0f;
            }
        }

        @Override
        public void afterTextChanged(Editable editable) {}
    };
}
=============================================================================
<<<<< BmiView.java >>>>>

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class BmiView extends SurfaceView implements SurfaceHolder.Callback {
    Context mContext;
    SurfaceHolder mHolder;
    BmiThread mThread;

    int screenWidth;
    int screenHeight;
    int radius;
    int xOfCenterOfCircle;
    int yOfCenterOfCircle;
    int tOfRectOfArc;
    int bOfRectOfArc;
    int lOfRectOfArc;
    int rOfRectOfArc;
    int xOfNeedleEnd = 0;
    int yOfNeedleEnd = 0;
    int intBmi;

    RectF rect;

    Paint mPaintGreen;
    Paint mPaintBlack;
    Paint mPaintNeedle;

    // constructor
    public BmiView(Context context, AttributeSet attrs) {
        super(context, attrs);
        SurfaceHolder holder = getHolder();
        holder.addCallback(this);

        mHolder = holder; // 생성한 holder를 전역변수에 저장
        mContext = context; // 인수로 넘겨온 context를 전역변수에 저장
        mThread = new BmiThread(); // GameThread생성

        mPaintGreen = new Paint();
        mPaintBlack = new Paint();
        mPaintNeedle = new Paint();
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);

        screenWidth = w;
        screenHeight = h;

        if ( h > w/2 ) {
            radius = w*4/10;
        } else {
            radius = h*4/5;
        }
        xOfCenterOfCircle = w/2;
        yOfCenterOfCircle = h*4/5;

        tOfRectOfArc = yOfCenterOfCircle - radius;
        bOfRectOfArc = yOfCenterOfCircle + radius;
        lOfRectOfArc = xOfCenterOfCircle - radius;
        rOfRectOfArc = xOfCenterOfCircle + radius;

        mPaintGreen.setColor(Color.GREEN);
        mPaintBlack.setColor(Color.BLACK);
        mPaintNeedle.setColor(Color.RED);
        mPaintNeedle.setStrokeWidth(10);

        rect = new RectF();
    }

    @Override
    public void surfaceCreated(SurfaceHolder surfaceHolder) {
        mThread.start();
    }

    @Override
    public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) { }

    @Override
    public void surfaceDestroyed(SurfaceHolder surfaceHolder) { }

    class BmiThread extends Thread {
        Bitmap imgBack;

        // constructor
        public BmiThread() {
        }

        public void run() {

            Canvas canvas = null;  
            while (true) {
                canvas = mHolder.lockCanvas();
                try {
                    synchronized (mHolder) {   // 동기화 유지
                        canvas.drawColor(Color.WHITE);
                        rect.set(lOfRectOfArc, tOfRectOfArc, rOfRectOfArc, bOfRectOfArc);
                        canvas.drawArc(rect, 180, 180, false, mPaintGreen);

                        intBmi = (int)MainActivity.floatBmi;
                        if(intBmi > 40) {
                            intBmi = 40;
                        }

                        double deg = 180*(intBmi/40d), rad;
                        rad = Math.toRadians(deg);

                        xOfNeedleEnd = xOfCenterOfCircle - (int)((  Math.cos(rad) )*radius);
                        yOfNeedleEnd = yOfCenterOfCircle - (int)((  Math.sin(rad) )*radius);

                        canvas.drawLine(xOfCenterOfCircle, yOfCenterOfCircle, xOfNeedleEnd, yOfNeedleEnd, mPaintNeedle);

                        canvas.drawCircle(xOfCenterOfCircle, yOfCenterOfCircle, 10, mPaintBlack);

                    }
                } finally {
                    mHolder.unlockCanvasAndPost(canvas);
                }
            } // end of while()
        } // end of run()
    } // 스레드 끝
}

=============================================================================
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="comp.whcomp.whteam.bmicalcu.MainActivity"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="4"
        android:orientation="vertical">

        <EditText
            android:id="@+id/heightEditText"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:ems="10"
            android:inputType="number|numberDecimal"
            android:maxLength="5" />

        <EditText
            android:id="@+id/weightEditText"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:ems="10"
            android:inputType="number|numberDecimal"
            android:maxLength="5" />

        <TextView
            android:id="@+id/bmiTextView"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:ems="10"
            android:inputType="textPersonName" />

    </LinearLayout>

    <comp.whcomp.whteam.bmicalcu.BmiView
        android:id="@+id/BmiView2"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="5" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="6"
        android:orientation="horizontal"></LinearLayout>

</LinearLayout>




질문자가 자신의 포인트 5 점을 걸었습니다.
답변하시면 포인트 2을, 답변이 채택되면 포인트 4을 드립니다.

질문답변 게시판에서 궁금한 사항을 해결하셨다면, 애써 답변해주신 분께 잘 되었다고 따뜻한 댓글 한마디 남겨주세요.
그리고 답변해주신 분의 글을 '추천' 해주세요.
추천받으신 분에게 1포인트가, 추천하신 분에게도 1포인트가 적립됩니다. ^^

OSKiller 2018-01-09 (화) 08:39 추천추천 1 반대 0
로그 찍어서 어디서 시간을 많이 잡아 먹는지 확인 하셨나요?
코드 분석은 귀찮아서 안했습니다.
안사 이쁜이 2018-01-08 (월) 22:13
축하드립니다. ;)
안드촘님은 안사 이쁜이에 당첨되어 2 포인트 지급되었습니다.
OSKiller 2018-01-09 (화) 08:39
베플로 선택된 게시물입니다.
로그 찍어서 어디서 시간을 많이 잡아 먹는지 확인 하셨나요?
코드 분석은 귀찮아서 안했습니다.
댓글주소 추천 1 반대 0
     
     
안드촘 2018-01-09 (화) 12:21

[@OSKiller]

해보겠습니다.  이런 경우에 어떻게 해야하는지 몰라서 질문했습니다.

알려주셔서 감사합니다.

댓글주소 추천 0 반대 0
에찌 2018-01-10 (수) 10:05
현재 소스상으로만 보면 쓰레드부분이라고 짐작이 가는데 쓰레드 동작하기전 로그와 쓰레드 동작 후 로그를 찍어보시고
맞다면 범위를 축소시키면서 로그를 찍어보세요 그럼 어느 한부분에서 확실히 시간을 잡아먹을 듯 합니다.
댓글주소 추천 0 반대 0
이전글  다음글  목록 글쓰기

 


Copyright ⓒ www.androidside.com. All rights reserved.
채팅 권한: 글쓰기 1개
2레벨 이상만 대화 가능
공개 채팅: 평일 !(9시 ~ 17시),토,일
안사2 변경사항 보러가기 챗방이 잘 안보이면 크롬에서 접속해주세요
챗방 숨기기 |  챗방 보이기