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

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

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

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

Android

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

Android Studio

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

解決済

EditText が改行により画面上部まで迫り上がった際に操作不能になり ANR が発生する

doughnut
doughnut

総合スコア31

Java

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

Android

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

Android Studio

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

1回答

0評価

2クリップ

242閲覧

投稿2020/09/12 15:55

編集2020/09/13 15:11

前提

以下のような UI を持つ Android アプリケーションを作成しています。

Header: ツールバー、タブ。CoordinatorLayout で管理され、上スクロール時にツールバーが畳まれるように実装しています。
Body: Scroll 可能な RecyclerView を持つ Fragment がセットされた ViewPager
Footer: EditText (行数制限ナシ)

下スクロール時上スクロール時
イメージ説明イメージ説明

実現したいこと

  • この構成で、EditText で改行が行われた場合にも問題なく拡大可能にしたい。

発生している問題・エラーメッセージ

  • 改行により、EditText が Header 辺りまで拡大された際に ANR が発生する。
2020-09-13 00:03:01.811 1161-1177/? E/ActivityManager: ANR in com.example.scrollingbehaviorwithedittext (com.example.scrollingbehaviorwithedittext/.MainActivity) PID: 3622 Reason: Input dispatching timed out (Waiting to send non-key event because the touched window has not finished processing certain input events that were delivered to it over 500.0ms ago. waitqueue length = 4, head.seq = 82170, Wait queue head age: 8935.3ms.) Load: 35.9 / 35.38 / 35.32 CPU usage from 14292ms to 0ms ago (2020-09-13 00:02:44.561 to 2020-09-13 00:02:58.854): 105% 3622/com.example.scrollingbehaviorwithedittext: 104% user + 1.4% kernel / faults: 29089 minor 17% 1161/system_server: 11% user + 5.8% kernel / faults: 9055 minor 161 major 2.7% 18435/com.google.android.gms.persistent: 1.6% user + 1.1% kernel / faults: 1682 minor 135 major 2.3% 1436/com.android.systemui: 1.2% user + 1.1% kernel / faults: 486 minor 1 major 2.1% 30401/com.google.android.googlequicksearchbox:search: 2% user + 0% kernel / faults: 4376 minor 62 major 1.8% 27026/adbd: 0.5% user + 1.2% kernel / faults: 1134 minor 1.7% 993/hisi_rxdata: 0% user + 1.7% kernel 1.6% 596/surfaceflinger: 0.9% user + 0.7% kernel / faults: 746 minor 23 major 1.5% 403/logd: 0.9% user + 0.5% kernel / faults: 168 minor 1 major 1.4% 990/hisi_hcc: 0% user + 1.4% kernel 1.3% 1624/com.huawei.powergenie: 0.7% user + 0.5% kernel / faults: 397 minor 2 major 1.2% 223/mmc-cmdqd/0: 0% user + 1.2% kernel 1.1% 703/hiview: 0.4% user + 0.7% kernel / faults: 66 minor 26 major 1% 131/kswapd0: 0% user + 1% kernel 0.7% 279/irq/333-0-001c: 0% user + 0.7% kernel 0% 681/media.extractor: 0% user + 0% kernel / faults: 1785 minor 98 major 0.7% 899/oal_gpio_rx_dat: 0% user + 0.7% kernel 0.7% 1642/com.android.phone: 0.5% user + 0.1% kernel / faults: 162 minor 31 major 0.6% 27946/logcat: 0.4% user + 0.2% kernel / faults: 1723 minor 0.5% 597/powerlogd: 0.4% user + 0% kernel / faults: 115 minor 0.4% 563/android.hardware.graphics.composer@2.1-service: 0% user + 0.4% kernel / faults: 1 minor 0.4% 904/hisi_frw/0: 0% user + 0.4% kernel 0.4% 2682/kworker/u16:1: 0% user + 0.4% kernel 0.3% 588/vendor.huawei.hardware.sensors@1.0-service: 0.1% user + 0.2% kernel 0.2% 404/servicemanager: 0% user + 0.2% kernel / faults: 17 minor 0.2% 3677/kworker/u16:10: 0% user + 0.2% kernel 0.2% 3991/com.google.android.gms: 0.1% user + 0.1% kernel / faults: 414 minor 2 major 0.2% 7/rcu_preempt: 0% user + 0.2% kernel 0.2% 583/vendor.huawei.hardware.light@2.0-service: 0% user + 0.1% kernel 0.2% 1564/com.huawei.systemmanager:service: 0.2% user + 0% kernel / faults: 227 minor 1 major 0.2% 2735/kworker/u16:9: 0% user + 0.2% kernel 0.2% 3268/com.google.process.gapps: 0.1% user + 0% kernel / faults: 373 minor 0.2% 3409/kworker/u16:4: 0% user + 0.2% kernel 0.1% 1//init: 0.1% user + 0% kernel / faults: 213 minor 10 major 0.1% 202/kworker/0:1H: 0% user + 0.1% kernel 0.1% 480/zygote64: 0% user + 0.1% kernel / faults: 150 minor 0.1% 657/displayengineserver: 0% user + 0.1% kernel / faults: 84 minor 26 major 0.1% 1673/com.huawei.android.launcher: 0.1% user + 0% kernel / faults: 36 minor 0.1% 3372/kworker/u16:3: 0% user + 0.1% kernel 0% 3410/kworker/u16:6: 0% user + 0% kernel 0.1% 3484/kworker/u17:2: 0% user + 0.1% kernel 0% 20/ksoftirqd/2: 0% user + 0% kernel 0% 35/ksoftirqd/5: 0% user + 0% kernel 0% 44/migration/7: 0% user + 0% kernel 0% 45/ksoftirqd/7: 0% user + 0% kernel 0% 58/mailbox-13: 0% user + 0% kernel 0% 85/sys_heap: 0% user + 0% kernel 0% 204/cfinteractive: 0% user + 0% kernel 0% 245/hw_kstate: 0% user + 0% kernel 0% 352/kworker/4:1H: 0% user + 0% kernel 0% 405/hwservicemanager: 0% user + 0% kernel / faults: 6 minor 0% 479/netd: 0% user + 0% kernel / faults: 156 minor 35 major 0% 587/vendor.huawei.hardware.power@1.0-service: 0% user + 0% kernel / faults: 1 minor 0% 594/lmkd: 0% user + 0% kernel / faults: 12 minor 0% 654/audioserver: 0% user + 0% kernel / faults: 96 minor 33 major 0% 655/cameraserver: 0% user + 0% kernel / faults: 183 minor 97 major 0% 67

該当のソースコード

MainActivity.java

java

public class MainActivity extends AppCompatActivity { private ViewPager viewPager; private Toolbar toolbar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); viewPager = findViewById(R.id.view_pager); toolbar = findViewById(R.id.toolbar); ContentsPagerAdapter adapter = new ContentsPagerAdapter(getSupportFragmentManager()); viewPager.setAdapter(adapter); setSupportActionBar(toolbar); getSupportActionBar().setTitle("Title"); getSupportActionBar().setElevation(0); } }

MainFragment.java

java

public class MainFragment extends Fragment { private RecyclerView recyclerView; // The higher the number of elements, the more pronounced the ANR becomes. private final static int LIST_ELEM_NUM = 20000; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_main, container, false); } @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); ArrayList<String> strings = new ArrayList<>(); for (int i = 0; i < LIST_ELEM_NUM; ++i) { strings.add(Integer.toString(i)); } recyclerView = view.findViewById(R.id.recycler_view); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); recyclerView.setAdapter(new RecyclerAdapter(getContext(), strings)); } }

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <androidx.coordinatorlayout.widget.CoordinatorLayout android:id="@+id/body" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@+id/edit_text"> <com.google.android.material.appbar.AppBarLayout android:id="@+id/app_bar" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true"> <androidx.appcompat.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_scrollFlags="scroll|enterAlways|snap" /> <com.google.android.material.tabs.TabLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#992244"/> </com.google.android.material.appbar.AppBarLayout> <androidx.viewpager.widget.ViewPager android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="match_parent" android:hapticFeedbackEnabled="false" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> </androidx.coordinatorlayout.widget.CoordinatorLayout> <EditText android:id="@+id/edit_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:background="#666666" android:hint="EditText." android:padding="12.5dp" /> </RelativeLayout>

試したこと

試した内容から、以下が判っています。

  • ViewPager (とセットした Fragment) を削除し、MainActivity に直接 RecyclerView を持たせた場合は ANR が発生しない。

・Fragment を複数持たせ横スクロール可能にしたい為、解決策にはならない。

  • RecyclerView にセットするリストの要素数が少なければ少ないほど、操作不能な時間は短くなる。

・要素数が 100 程度では ANR は発生しないが、実装ではより多くの要素数を持たせたい為解決策にはならない。

  • ViewPager に app:layout_behavior="@string/appbar_scrolling_view_behavior" を指定しない場合 ANR は発生しない。

・RecyclerView が Header に被らないようにしたい為、解決策にはならない。

  • EditText を CoordinatorLayout に内包した場合 ANR は発生しない。

・Footer は固定したいが、スクロール時に EditText が隠れてしまう為解決策にならない。

  • ViewPager2 への移行を試したが、以前として ANR は発生する。

補足情報(FW/ツールのバージョンなど)

  • 開発環境: Android Studio 4.0.1
  • 検証端末: Sony Xperia XZ3 (Android 10), Huawei Nova lite 2 (Android 8.0)

・両端末で同様の事象が起こることを確認しています。

・提示しきれなかったコードはこちらから確認下さい。開発環境によっては gradle のバージョンを下げる必要があります。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Java

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

Android

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

Android Studio

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