Androidアプリ開発初心者です。
Android Studio 2.0で作成をしていて、今まで、実機テストを、android.4.1.2(API 16)で行ってきました。
特に問題もなく、スムーズに動いてくれていました。

ある程度できた後、 android.6.0.1(API 23) で実機テストをしてみました。
すると、動作はカクカクしてしまい、まともに動きません。
キー入力も反応が悪く、入力もできません。

API16では、HTCと、xperiaタブレットで試して、どちらも問題なし。
API23では、xperia xと、DIGNOで試して、どちらもNGでした。

どういった理由で上記状況になってしまうのか、全く分からず困っています。
どんな可能性があるのか、ご教授頂けると助かります。
よろしくお願いいたします。

不具合の出ている具体的な個所としては、Animationをしようした、動きで、特に他の動作・効果音等が重なった際NGとなる。
また、timer.scheduleを使用した画像に入れ替えも飛び飛びでコマ落ち状態です。
効果音は、SoundPoolを使用しています。

何かしらのヒントでもあれば助かります。よろしくお願いいたします。

メインの文面抜粋


 //音楽の読み込み・設定
p = MediaPlayer.create(getApplicationContext(), R.raw.s_m_map01);
p.setLooping(true);//連続再生ON
p.setVolume(0.4f, 0.4f);

//効果音設定
sp = new SoundPool(3, AudioManager.STREAM_MUSIC, 0);
sound_id[0] = sp.load(this, R.raw.s_s_map00, 1);
sound_id[1] = sp.load(this, R.raw.s_s_map01, 1);
sound_id[2] = sp.load(this, R.raw.s_s_map02, 1);

//定期実行スタート(基本 0.175秒毎)
timer.schedule(anim, 0L, 175L);



// 0.175秒ごとに実行**********************************************************************
TimerTask anim = new TimerTask() {
    public void run() {
        if (App.power == 0 && power_0 == true){
            power_0 = false;
         }else{
            power_0 = true;//パワーがなくなると、2回に1回の処理へ

            if (kyara_i_t != 0) {
                //移動アニメーション実行へor実行中--------------------
                hdl.post(new kyara_i_jikkou());//移動実行
                } else if (((ImageView) findViewById(R.id.map_b1)).isPressed() || ((ImageView) findViewById(R.id.map_b2)).isPressed() || ((ImageView) findViewById(R.id.map_b3)).isPressed() || ((ImageView) findViewById(R.id.map_b4)).isPressed()) {
                //移動無実行で、キーが長押しされた場合---------------------
                if (input == 1) {
                    kyara_i_t = 1;
                    if (((ImageView) findViewById(R.id.map_b1)).isPressed()) kyara_i = 1;
                    if (((ImageView) findViewById(R.id.map_b2)).isPressed()) kyara_i = 2;
                    if (((ImageView) findViewById(R.id.map_b3)).isPressed()) kyara_i = 3;
                    if (((ImageView) findViewById(R.id.map_b4)).isPressed()) kyara_i = 4;
                    hdl.post(new kyara_i_jikkou());//移動実行
                }
            } else {
                //何もなされてなければ、足踏み実行----------------------
                hdl.post(new kyara_anim());//足踏み実行
                }
            }
        }
    };

// キャラクターのアニメーション実行(足踏み)**************************
    class kyara_anim implements Runnable {
        public void run() {
            //キャラクター足踏み画像へ変更
            int i;
            kyara_anim++;
            if (kyara_anim == 5) kyara_anim = 1;
            if (kyara_anim == 4) i = 2;
            else i = kyara_anim;

            img_id = "kyara";
            img_file = "kyara_" + kyara_no + "_" + kyara_m + "_" + i;
            img_img(img_file, img_id);
        }
    }

以上、一部抜粋してみました。該当箇所になるかわかりませんが、
よろしくお願いします。
(初めて作ったandroidプログラムで汚いですが、よろしくお願いします。)


ご回答、大変ありがとうございます。参考になります。
早速頂いたプログラムに変更してみましたが、状況は改善できませんでした。

その他、ご教授頂いた件について、ご回答いたします。

img_imgについて

private void img_img(String img_file2, String img_id2) {
        //画像の変更 img(画像データ,どの名前?)*******************************************************************************************************
        String[] stArrayData = img_file2.split("\\.");
        int mon_id = getResources().getIdentifier(stArrayData[0], "drawable", getPackageName());//リソースの取得

        String[] stArrayData2 = img_id2.split("\\.");
        int mon_id2 = getResources().getIdentifier(stArrayData2[0], "id", getPackageName());//リソースの取得

        ((ImageView) findViewById(mon_id2)).setImageResource(mon_id);
    }

画像を切り替えるプログラムとなっています。

CPUモニターについて
  Android6.0 = CPUは30%位です。
  Android4.1 = CPUは1%位です。
  大きな差があります。

GPUモニターについて
Android6.0 =
  Swap Buffers が100~200msとふり切れています。
  たまにMisc Time も10msを超えています。
  画像を前もって読み込んでいないのが原因でしょうか?
Android4.1 =
  表示してくれませんでした??

その他メモリーについて
  Android6.0 = CPUは250MB位です。
  Android4.1 = CPUは120MB位です。
  解像度の違いからでしょうか?
  元々、数字が大きいのが気になります。
  インストール時のファイルサイズは、30MB位です。

以上、お手数をおかけいたしますが、よろしくお願いいたします。

追記**************************************************************************
Android4.1で通常通り動くことから初期設定に何か問題あるのかなとも
考えたんですが、下記の「build.gradle」は関係ないでしょうか?

①クラス

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.0.0'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
allprojects {
    repositories {
        jcenter()
    }
}
task clean(type: Delete) {
    delete rootProject.buildDir
}

②app

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "**********************************"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    // 追加
    applicationVariants.all { variant ->
        if (variant.buildType.name.equals("release")) {
            variant.outputs.each { output ->
                if (output.outputFile != null
                        && output.outputFile.name.endsWith('.apk')) {
                    // .apk名の付け替え newNameを必要に応じて変更すること
                    def versionName  =defaultConfig.versionName
                    def newName      ="vs_v${versionName}.apk"
                    output.outputFile=new File(output.outputFile.parent,newName)
                }
            }
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.3.0'
    compile 'com.google.android.gms:play-services-ads:7.5.0'
    compile 'com.google.code.gson:gson:2.4'
}

よろしくお願いいたします。