[英]Android app crashes when using setVisibility(View.GONE);
我有一個運行 5 秒的啟動活動,我想要 2 秒有一個 textview (txtCRF) 和一個 imageview (canuck),另外 3 秒有一個不同的 Z6C666B7F9E6BE3A84FZF2() 每當我在任何元素上使用 setVisibility(View.GONE) 時,應用程序都會崩潰。
這是我的代碼:
package com.example.bounce;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
public class Opening_Activity extends AppCompatActivity {
private TextView txtCRF;
private ImageView canuck;
private ImageView titlescreen;
public static final int VISIBLE = 0x00000000;
public static final int INVISIBLE = 0x00000004;
public static final int GONE = 0x00000008;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_opening_);
txtCRF = (TextView) findViewById(R.id.txtCRF);
canuck = (ImageView) findViewById(R.id.canuck);
titlescreen = (ImageView) findViewById(R.id.titlescreen);
txtCRF.setVisibility(View.VISIBLE);
canuck.setVisibility(View.VISIBLE);
titlescreen.setVisibility(View.GONE);
Thread thread = new Thread() {
@Override
public void run() {
try {
sleep(5000);
} catch (Exception e) {
e.printStackTrace();
} finally {
Intent mainIntent = new Intent(Opening_Activity.this, com.example.bounce.MainActivity.class);
startActivity(mainIntent);
}
}
};
thread.start();
Thread thread2 = new Thread() {
@Override
public void run() {
try {
sleep(2000);
} catch (Exception e) {
e.printStackTrace();
} finally {
txtCRF.setVisibility(View.GONE);
canuck.setVisibility(View.GONE);
titlescreen.setVisibility(View.VISIBLE);
MediaPlayer opening = MediaPlayer.create(Opening_Activity.this, R.raw.openingsound);
opening.start();
}
}
};
thread2.start();
}
@Override
protected void onPause() {
super.onPause();
finish();
}
}
我的 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"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background3"
android:animateLayoutChanges="true"
tools:context=".Opening_Activity">
<ImageView
android:id="@+id/canuck"
android:layout_width="wrap_content"
android:layout_height="200dp"
android:src="@drawable/canuckyy"
android:layout_centerHorizontal="true"
android:layout_marginTop="200dp"
/>
<ImageView
android:id="@+id/titlescreen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/background1" />
<TextView
android:id="@+id/txtCRF"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="400dp"
android:text="CRF"
android:textColor="@color/white"
android:textStyle="italic"
android:textSize="27dp"/>
</RelativeLayout>
查看logcat 。
線程在后台運行並嘗試更改 ui,這會引發異常。
一種可能的解決方法是在活動上下文中使用runOnUithread
:
} finally {
runOnUiThread(new Runnable() {
@Override
public void run() {
txtCRF.setVisibility(View.GONE);
canuck.setVisibility(View.GONE);
titlescreen.setVisibility(View.VISIBLE);
MediaPlayer opening = MediaPlayer.create(Opening_Activity.this, R.raw.openingsound);
opening.start();
}
});
}
或者您可以使用處理程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.