あなたが説明したステップはおそらく役に立ちません。
そのことは、Dalvikの問題ではありません。たとえば、Oracle Java VMで同様の検証者が採用されています。簡単な答え: あなたのメソッドは複雑すぎます. 。あなたが見るエラーは主に多すぎることが原因です。
- パラメーター
- ローカル変数
- 例外ハンドラ
- コード命令
より正確には、この問題はこのスレッドで説明されています。 https://groups.google.com/forum/?fromgroups=#!! Topic / Android-Developers/4QnoidBhyfc.
引用する:
(レジスタ数*命令ワード数)の値は、2 ^ 21より大きい。 (...)それは検証者がアプリのネイティブヒープを吹き飛ばすのを防ぐことを目的としています。
ここで似たようなレポートを見ることもできます。 http://www.mentby.com/group/android-developers/verifyError - 洗浄 - Rejecting-Large-Method.html 問題を解決する方法に関するポインタを使用します。
YEP、Dalvikコンパイラは、メソッド内のすべてのローカル変数に "レジスタ"を割り当てようとします。それはその多くを扱うことができるはずですが、明らかにできません。それらをインスタンス変数とすることで、コンパイラのニーズ/「管理」を削除します(そしてまたメソッドを小さな量の小さい量にする)。
それを解決するために、あなたは一般的に大きな方法を破るべきです(おそらくおそらく onClick()
?)より小さな部分に。また、ローカル変数をクラスフィールドに変換すると、同じ問題を持つ人々が何人かの人々に役立ちました。