質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

1回答

3286閲覧

画面遷移できない

haruk

総合スコア12

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2015/10/08 15:46

編集2015/10/09 05:34

画面の遷移先のクラスがxml でレイアウト編集すると遷移できません。

Class.java(遷移先)

package com.***.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class *** extends AppCompatActivity {

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_***); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_***, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); }

}

activity_class.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="fill_parent" tools:context="com.***.myapplication.***" android:background="@drawable/background">

<ImageView android:layout_width="160dp" android:layout_height="160dp" android:id="@+id/imageView3" android:src="@drawable/***" android:scaleType="centerCrop" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" />
</RelativeLayout>

このアクティビティに遷移するようにすると、unfortunately...と出てエラーになります。
ちなみにImageViewを抜いて

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="fill_parent" tools:context="com.***.myapplication.***" android:background="@drawable/background">
</RelativeLayout>

だけにするとエラーは出ません。

遅くなりました
logcatのエラーはこんな感じです。

10-09 05:32:36.539 6209-6209/com..myapplication E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.
.myapplication, PID: 6209
java.lang.OutOfMemoryError: Failed to allocate a 36 byte allocation with 1952 free bytes and 1952B until OOM
at java.lang.ref.FinalizerReference.add(FinalizerReference.java:54)
at android.widget.TextView.<init>(TextView.java:684)
at android.widget.TextView.<init>(TextView.java:671)
at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:48)
at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:44)
at android.support.v7.internal.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:103)
at android.support.v7.app.AppCompatDelegateImplV7.createView(AppCompatDelegateImplV7.java:912)
at android.support.v7.app.AppCompatDelegateImplV7.onCreateView(AppCompatDelegateImplV7.java:966)
at android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:44)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:746)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:835)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:255)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:109)
at com..myapplication..onCreate(***.java:13)
at android.app.Activity.performCreate(Activity.java:6237)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2015/10/08 16:14

エラーメッセージがLogcatに出ていませんか?出ていればそれを貼って欲しいです.
guest

回答1

0

メモリが枯渇しているようです。
ImageViewで読み込んでる画像のサイズを確認してください。必要なければ画像を縮小してください。

投稿2015/10/09 07:09

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

haruk

2015/10/09 08:39

160dp*160dpから100dp*100dpにしましたが変化なしでした それ以外の解決策はないでしょうか? ちなみに遷移前のアクティビティでは100dp*100dpの画像を 120枚ほどつかっているのですがこれも関係あるのでしょうか?
yona

2015/10/09 09:59

・あなたのアプリ内で下記のような状態が起きていると思います。 1:遷移前のactivityでメモリを大量消費、アプリに与えられたメモリ容量が枯渇寸前。 2:遷移後のactivity作成時に使うメモリが確保できずにアウトオブメモリーが発生 ・注意点 1:遷移前のメモリは解放されません。 2:たしか、画面上のサイズはメモリには関係ないと思います。 3:画像をViewに与えたあと、明示的にメモリ解放を行わないと、メモリリークの原因となる。 ・対応 1:srcに与えるBitmapを小さく読み込む 2:画面に表示しないImageViewは明示的にメモリ解放を行う。 3:マニフェストファイルでメモリヒープをラージに設定する。
haruk

2015/10/09 15:50

返答していただいた対応1,2,3について私なりに調べてみたつもりなのですが、 1はそれを自分の描いたものに応用することができず、2,3は調べたのですが、見つけられませんでした。よろしければ詳細に教えていだたけないでしょうか? ちなみに画像はhttp://techbooster.org/android/ui/1282/ のサイト 様を参考にさせていただいたものに Bitmap image; image = BitmapFactory.decodeResource(getResources(), R.drawable.ico_***); Bitmap image; image2 = BitmapFactory.decodeResource(getResources(), R.drawable.ico_***); ...とImage120ほどまで追加したものにしています。
swordone

2015/10/09 15:58

ListViewを使う時だと,スクロールで新たに項目を表示する際に画面外に出た項目があったら,その項目が置かれていた場所を再利用する仕組みができたのですが,これには適用できないでしょうか?
haruk

2015/10/09 16:11 編集

サイトをみていただきたいのですが、 if (null == convertView) { convertView = layoutInflater_.inflate(R.layout.listview, null); } の部分でそれは適応されいるような気がするのですがどうでしょうか?
yona

2015/10/09 16:20

swordoneさん 2:画面に表示しないImageViewは明示的にメモリ解放を行う 上記の対応で使えそうですが。画面レイアウトがわからないので何とも言えないですね。 リスト形式であれば適用できますが… harukさん 1:srcに与えるBitmapを小さく読み込む →100dp*100dpに対して1000px*1000px等の大きいサイズの画像を読み込んでいる場合はBitmapを作るときに1/10のサイズで読み込むようにする。 2:画面に表示しないImageViewは明示的にメモリ解放を行う。 →遷移前の画面レイアウトはリスト形式であるならswordoneさんの対応ができます。 →「遷移後の画面から遷移前の画面に戻らない場合」、または「画像の再読み込みが許される場合」であれば遷移時にImageViewのsrc属性にnullを設定することで明示的にメモリを開放できる。。 3:マニフェストファイルでメモリヒープをラージに設定する。 →マニフェストファイルの applicationタグにandroid:largeHeap="true"を追記  この方法では根本的な解決にはならずいづれメモリは枯渇する 確認事項 ・遷移前の画面レイアウトはどのようなものか? ・遷移前の画面で使用する画像の縦横サイズは何pxか? ・遷移前の画面はすべてユニークなのか? ・遷移後の画面から遷移前の画面に戻ることはあるのか?
haruk

2015/10/09 17:19

yonaさん 1.画像のサイズはすべて100px*100pxです。 2.それは if (null == convertView) { convertView = layoutInflater_.inflate(R.layout.listview, null); } のことでしょうか? 3.まだ、アクティビティを追加する予定なのでこの解決方法は無理のようですね... 確認事項 ・レイアウトは下記のサイト様とまったく同じです。 http://techbooster.org/android/ui/1282/  ・もともと100px*100pxのものを120ほど60dp*60dpにして使用しています。 ・ユニークとはどういうことでしょうか? ・戻るようにしたいです。 補足ですが、ゲームなどの攻略アプリを作っていて、キャラクターの画像から そのキャラクターの詳細情報を見れるようにするプログラムのつもりです。もっと効率のいいやり方があるのでしょうか?
yona

2015/10/09 19:05 編集

やはりどこかでリークが発生している可能性が高いです。 たとえば画像すべてがリークしていた場合、縦*横*色情報*枚数でざっくり使用メモリを計算すると100*100*3*120=3.5MBとなり、アウトオブメモリーが発生する可能性は薄く感じます。 Bitmap image; image2 = BitmapFactory.decodeResource(getResources(), R.drawable.ico_***); 上記のコードからすると画像はリソースフォルダの下にあると思いますが、ImageView#setImageResource()を使わずにBitmapを生成しているのはなぜでしょうか。 また、生成したBitmapをフィールド等に保持したりはしていないでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問