最近、Eclipseを使用してscalaでAndroidアプリを作成しました。私のプログラムにいくつかのクラス/アクティビティしかなかったまで、すべてが大丈夫でした。コードを追加すると、JVMがクラッシュし始め、Eclipseがフリーズすることが多く、adbは常に接続を失いました。タスクマネージャーは、Javaプロセスが800から1300MBのメモリを使用していることを示しました。
私のコンピューターのハードウェアパラメーターは、i7第3世代、8GB DDR3、SSD 256のように非常に優れています。したがって、それは理由ではありません。
また、私のソフトウェアは最新であり、Eclipseの最新バージョン、Android SDK、Scala、Java開発キット、すべてのEclipse用プラグインで構成されています。-vmargsはscala開発用に構成されていますが、まったく役に立ちませんでした。それで問題の原因としてそれを排除しました。
コードをJavaに書き直すと、everythigはうまくいき、プロジェクトを続行できます。
Androidプロジェクトでscalaを操作するための解決策をすでに見つけている人はいますか?私はこことグーグルグループでいくつかの同様のトピックを読みましたが、この質問に対する答えはありませんでした。
編集:
ビジュアルVMを使用してコードのプロファイルを作成しましたが、ヒープスペースの使用量は正常でした。これが私のコードの抜粋です。
imports ...
class MainActivity extends FragmentActivity {
private lazy val timePicker = findViewById(R.id.timePicker).asInstanceOf[TimePicker]
private lazy val spinner_sourceBank = findViewById(R.id.spinnerSource).asInstanceOf[Spinner]
private lazy val spinner_targetBank = findViewById(R.id.spinnerDestination).asInstanceOf[Spinner]
private lazy val myApplication = getApplication.asInstanceOf[MyApplication]
private var ignoreTimeChange = false
override protected def onCreate(savedInstanceState: Bundle) = {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
timePicker.setIs24HourView(true)
initializeSpinner(spinner_sourceBank)
initializeSpinner(spinner_targetBank)
}
private def initializeSpinner(spinner: Spinner) = {
val adapter = ArrayAdapter.createFromResource(this, R.array.banks, R.layout.spinner_item)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
spinner.setAdapter(adapter)
}
def reset(w: View) = {
timePicker.setCurrentHour(13)
timePicker.setCurrentMinute(00)
spinner_sourceBank.setSelection(0)
spinner_targetBank.setSelection(0)
}
def submit(w: View) = {
if (spinner_sourceBank.getSelectedItemPosition == 0 || spinner_targetBank.getSelectedItemPosition == 0) {
new AlertDialog.Builder(this).setPositiveButton("OK", new OnClickListener {
override def onClick(dialog: DialogInterface, which: Int) { dialog dismiss }
}).setMessage(getString(R.string.alert_title)).setTitle("Alert Dialog").setIcon(android.R.drawable.ic_dialog_alert).create.show
} else manageFragments(sourceBank, targetBank)
}
def manageFragments(sourceBank: String, targetBank: String) = {
val fragmentTransaction = getSupportFragmentManager.beginTransaction
if (targetBank == sourceBank) myApplication.setCurrentFragment(MyApplication.NOW)
else myApplication.setCurrentFragment(MyApplication.FIRST_SESSION)
fragmentTransaction.replace(R.id.fragment_container, myApplication.getCurrentFragment)
fragmentTransaction.commit
}
override def onCreateOptionsMenu(menu: Menu): Boolean = { getMenuInflater.inflate(R.menu.activity_main, menu); true }
}
私は自分のアプリケーションをモバイルデバイスでテストすることができ、それはかなりうまく動作しました。コードを書くこともできましたが、eclipseは古いコンピューターで実行されたように動作しました。タブの切り替えには時間がかかり、ビルドとデプロイに時間がかかりました。