奇妙なUIの問題。イメージは時には黒(正確な境界)または不適切なイメージソース(正しい境界で)で読み込まれます。これはImageViews
に影響し、色資源への参照を伴ってandroid:background
タグを実行しました。欠落または誤ったイメージや背景
私のアプリケーションは6つのライブラリプロジェクトに依存しており、アプリケーションを使ってネイティブコードを実行し、アプリケーション内のアクティビティはGlSurfaceViewを使用します(問題を表示するアクティビティのすべてにOpenGLコンポーネントが含まれているわけではありません)。問題は、これらの場所のいずれか、または大量のメモリを使用することによってそれらの組み合わせから発生すると考えられます。
次のスクリーンショットでは、この動作を見ることができます:
これは、(実際には間違って私のImageViewのに引き込まれている6かそこらピクセル幅の列区切りの画像であるImageViewのが正しいサイズているようです自体)。
ではなくそうのように登場(と残った)アプリケーションの出入り、その後、再び(繰り返し)で:
を強制解除し、後アプリデータを消去して正しい形式に戻しました:
また、隣にある拡大鏡の画像は、それぞれに細かい部分が表示されています。これらの欠落/誤った画像や背景の問題は、アプリケーションのライフサイクル全体でランダムに発生するように思われ、私はそれを再現する方法を見つけることができませんでした。
これらのイメージのレイアウトは何も特別なものではありません。私はレンダリングのライフサイクルで面白いことはしません(私はonDraw()
またはonMeasure()
などを上書きしていません)。これらの画像のソースは動的に設定されず、XMLを介して設定されます。
上記の例からわかるように、インストール間ではなくアプリライフサイクル間に発生するので、ビルドの問題ではありません。それはまた別のデバイスで起こっている、サムスン8.9、エイサーIconiaタブ、Motarola XOOM、
それは私のネイティブコードによってナッジされた参照テーブルに何らかのエラーがあるようです。それとも、あまりにも多くのメモリを使用するアプリケーションのいくつかの段階で私の影響ですか?ここで
は、上記の例のXMLソースです:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/browseProgressWrapper"
android:layout_width="match_parent"
android:layout_height="@dimen/actionbar_compat_height"
android:orientation="horizontal">
<RelativeLayout android:layout_width="@dimen/search_bar_width"
android:layout_height="match_parent">
<EditText android:id="@+id/browseFilter"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="4dp"
android:layout_marginLeft="5dp"
android:imeOptions="actionSearch"
android:background="@drawable/edit_text_blue"
android:maxLength="30"/>
<ImageView android:id="@+id/clearSearch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:src="@drawable/ic_input_delete"
android:layout_marginRight="5dp"/>
</RelativeLayout>
<ImageView android:id="@+id/browseFilterButton"
android:src="@drawable/ic_menu_search"
android:scaleType="center"
android:layout_width="@dimen/actionbar_compat_height"
android:layout_height="@dimen/actionbar_compat_height"
android:layout_gravity="center_vertical"
android:minWidth="@dimen/actionbar_compat_height"/>
</LinearLayout>
私はスクリーンショットを取得するために起こったような別の発生、周囲のコード/レイアウトのより完全な説明:
を私は持っています「設定」Activity
は、新しい設定の詳細を保存した後にアプリケーションを再起動します。それは、Service
を停止し、新たなActivity
(スプラッシュ活動)を呼び出し、自分自身を仕上げすることによってこれを行います。ほとんどの時間(とほとんどのデバイス上)
mConfiguration.save();
mConfiguration = new Configuration(Configuration.getInstance());
getActivity().stopService(new Intent(getActivity(), NativeService.class));
getActivity().finish();
startActivity(new Intent(getActivity(), SplashActivity.class));
これは正常に動作し、スプラッシュ活動は、ロードするイメージが含まれています正しく時には、一部のデバイスでは、スプラッシュアクティビティで、不適切なリソース(テスターが「Nike Ticketを逆さまにしたもの」)または空白のボックス(以下に示す)のいずれかがロードされることがあります。なぜ誰が知っていますか?ここで
が、それは非常に簡単です、あなたが見ることができるように、スプラッシュページのレイアウトで、何の驚き:<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/ContentBackgroundColor"
android:orientation="vertical" >
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="2" />
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@drawable/manager_android_400" />
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
<ProgressBar
style="@android:style/Widget.ProgressBar.Large"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" />
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="2" />
</LinearLayout>
理論がテストとdebunct:
私がきたんこれはスプラッシュ画面が終了して次のアクティビティに移動する前にレイアウトが完全に描画されていないプロセッサ/メモリの問題であると理論化しましたので、このコードを入れてください:
image = (ImageView) findViewById(R.id.image);
image.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
image.getViewTreeObserver().removeGlobalOnLayoutListener(this);
moveToStartScreen.start();
}
});
上記のコードは、画像が確実に開始ページに移動する前に確実に読み込まれていることを確認していましたが、観察可能な効果がなかったようです。
これは、いくつかは、どのようにプログラムの実行にcurruptedさR.id/R.colour/R.drawableリソースによって引き起こされていることができれば、私も思っていたもう一つの理論
?なぜが起こるかもしれないと誰も知っていますか?
Androidが正しく割り当てていないメモリアドレスで自分のネイティブコードが実行されている可能性がありますか?
これまでに気付いたことがありますか?
私が使っていたライブラリプロジェクトに現れて、間違ったドローアブルの問題を持っていた、とあなたは同じことを報告して以来、私はそれをGoogleで検索してhttp://stackoverflow.com/questions/7724145/android-drawableになってしまいました-resource-id-conflict。どんな助け? – aamit915
あなたのネイティブコードがあなたのアプリケーションとどのようにインターフェースするかをもう少し説明できますか?ネイティブコードが何かを書くことは、私にとってもっともらしいようです。 –
@MattGibson UIコンポーネントが受信するために登録できるコールバック/リスナメソッドを起動するJNIメソッドを介したネイティブコードインターフェイス。ネイティブコードをOpenGLコンテキストに直接書き込むことを考慮しない限り、JNIの外部に直接データを送信することはありません。 – Graeme