在清单中使用 <uses-sdk> 时应用程序在启动时崩溃
App crashes on startup when using <uses-sdk> in manifest
我已经实现了 ViewFlipper
,当我 不 使用清单中的 <uses-sdk>
行时运行良好。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.warde.loyal"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="21" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
异常发生在setContentView
。查看日志记录
02-17 10:23:59.479: E/AndroidRuntime(3851): FATAL EXCEPTION: main
02-17 10:23:59.479: E/AndroidRuntime(3851): Process: com.warde.loyal, PID: 3851
02-17 10:23:59.479: E/AndroidRuntime(3851): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.warde.loyal/com.warde.loyal.MainActivity}: android.view.InflateException: Binary XML file line #33: Error inflating class <unknown>
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2350)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.app.ActivityThread.access0(ActivityThread.java:163)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1257)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.os.Handler.dispatchMessage(Handler.java:102)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.os.Looper.loop(Looper.java:157)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.app.ActivityThread.main(ActivityThread.java:5335)
02-17 10:23:59.479: E/AndroidRuntime(3851): at java.lang.reflect.Method.invokeNative(Native Method)
02-17 10:23:59.479: E/AndroidRuntime(3851): at java.lang.reflect.Method.invoke(Method.java:515)
02-17 10:23:59.479: E/AndroidRuntime(3851): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
02-17 10:23:59.479: E/AndroidRuntime(3851): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
02-17 10:23:59.479: E/AndroidRuntime(3851): at dalvik.system.NativeStart.main(Native Method)
02-17 10:23:59.479: E/AndroidRuntime(3851): Caused by: android.view.InflateException: Binary XML file line #33: Error inflating class <unknown>
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.view.LayoutInflater.createView(LayoutInflater.java:626)
02-17 10:23:59.479: E/AndroidRuntime(3851): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.view.LayoutInflater.onCreateView(LayoutInflater.java:675)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:700)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.view.LayoutInflater.rInflate(LayoutInflater.java:769)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.view.LayoutInflater.rInflate(LayoutInflater.java:769)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.view.LayoutInflater.inflate(LayoutInflater.java:354)
02-17 10:23:59.479: E/AndroidRuntime(3851): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:340)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.app.Activity.setContentView(Activity.java:1973)
02-17 10:23:59.479: E/AndroidRuntime(3851): at com.warde.loyal.MainActivity.onCreate(MainActivity.java:32)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.app.Activity.performCreate(Activity.java:5389)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2256)
02-17 10:23:59.479: E/AndroidRuntime(3851): ... 11 more
02-17 10:23:59.479: E/AndroidRuntime(3851): Caused by: java.lang.reflect.InvocationTargetException
02-17 10:23:59.479: E/AndroidRuntime(3851): at java.lang.reflect.Constructor.constructNative(Native Method)
02-17 10:23:59.479: E/AndroidRuntime(3851): at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.view.LayoutInflater.createView(LayoutInflater.java:600)
02-17 10:23:59.479: E/AndroidRuntime(3851): ... 26 more
02-17 10:23:59.479: E/AndroidRuntime(3851): Caused by: java.lang.OutOfMemoryError
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:677)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:507)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:872)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.content.res.Resources.loadDrawable(Resources.java:3054)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.content.res.TypedArray.getDrawable(TypedArray.java:602)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.widget.ImageView.<init>(ImageView.java:133)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.widget.ImageView.<init>(ImageView.java:123)
02-17 10:23:59.479: E/AndroidRuntime(3851): ... 29 more
这是我实现 ViewFlipper
的代码。
public class MainActivity extends Activity {
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
private ViewFlipper mViewFlipper;
private AnimationListener mAnimationListener;
private Context mContext;
@SuppressWarnings("deprecation")
private final GestureDetector detector = new GestureDetector(new SwipeGestureDetector());
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mContext = this;
mViewFlipper = (ViewFlipper) this.findViewById(R.id.view_flipper);
mViewFlipper.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(final View view, final MotionEvent event) {
detector.onTouchEvent(event);
return true;
}
});
mViewFlipper.setAutoStart(true);
mViewFlipper.setFlipInterval(4000);
mViewFlipper.startFlipping();
//animation listener
mAnimationListener = new Animation.AnimationListener() {
public void onAnimationStart(Animation animation) {
//animation started event
}
public void onAnimationRepeat(Animation animation) {
}
public void onAnimationEnd(Animation animation) {
//TODO animation stopped event
}
};
}
class SwipeGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
try {
// right to left swipe
if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
mViewFlipper.setInAnimation(AnimationUtils.loadAnimation(mContext, R.anim.left_in));
mViewFlipper.setOutAnimation(AnimationUtils.loadAnimation(mContext, R.anim.left_out));
// controlling animation
mViewFlipper.getInAnimation().setAnimationListener(mAnimationListener);
mViewFlipper.showNext();
return true;
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
mViewFlipper.setInAnimation(AnimationUtils.loadAnimation(mContext, R.anim.right_in));
mViewFlipper.setOutAnimation(AnimationUtils.loadAnimation(mContext,R.anim.right_out));
// controlling animation
mViewFlipper.getInAnimation().setAnimationListener(mAnimationListener);
mViewFlipper.showPrevious();
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}
}
我想,也许我需要实施 AsynkTask
?
代码中应该更改什么。 ?
提前致谢...
编辑
main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ViewFlipper
android:id="@+id/view_flipper"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
android:src="@drawable/lightning" />
<TextView
style="@style/ImageTitle"
android:text="@string/lightning" />
</RelativeLayout>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
android:src="@drawable/color_baloons" />
<TextView
style="@style/ImageTitle"
android:text="@string/color_baloons" />
</RelativeLayout>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
android:src="@drawable/natural_wall" />
<TextView
style="@style/ImageTitle"
android:text="@string/natural_wall" />
</RelativeLayout>
</ViewFlipper>
</RelativeLayout>
我使用的是非常大的图片,通过使用压缩的小尺寸图片解决了!
我已经实现了 ViewFlipper
,当我 不 使用清单中的 <uses-sdk>
行时运行良好。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.warde.loyal"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="21" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
异常发生在setContentView
。查看日志记录
02-17 10:23:59.479: E/AndroidRuntime(3851): FATAL EXCEPTION: main
02-17 10:23:59.479: E/AndroidRuntime(3851): Process: com.warde.loyal, PID: 3851
02-17 10:23:59.479: E/AndroidRuntime(3851): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.warde.loyal/com.warde.loyal.MainActivity}: android.view.InflateException: Binary XML file line #33: Error inflating class <unknown>
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2350)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.app.ActivityThread.access0(ActivityThread.java:163)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1257)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.os.Handler.dispatchMessage(Handler.java:102)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.os.Looper.loop(Looper.java:157)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.app.ActivityThread.main(ActivityThread.java:5335)
02-17 10:23:59.479: E/AndroidRuntime(3851): at java.lang.reflect.Method.invokeNative(Native Method)
02-17 10:23:59.479: E/AndroidRuntime(3851): at java.lang.reflect.Method.invoke(Method.java:515)
02-17 10:23:59.479: E/AndroidRuntime(3851): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
02-17 10:23:59.479: E/AndroidRuntime(3851): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
02-17 10:23:59.479: E/AndroidRuntime(3851): at dalvik.system.NativeStart.main(Native Method)
02-17 10:23:59.479: E/AndroidRuntime(3851): Caused by: android.view.InflateException: Binary XML file line #33: Error inflating class <unknown>
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.view.LayoutInflater.createView(LayoutInflater.java:626)
02-17 10:23:59.479: E/AndroidRuntime(3851): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.view.LayoutInflater.onCreateView(LayoutInflater.java:675)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:700)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.view.LayoutInflater.rInflate(LayoutInflater.java:769)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.view.LayoutInflater.rInflate(LayoutInflater.java:769)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.view.LayoutInflater.inflate(LayoutInflater.java:354)
02-17 10:23:59.479: E/AndroidRuntime(3851): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:340)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.app.Activity.setContentView(Activity.java:1973)
02-17 10:23:59.479: E/AndroidRuntime(3851): at com.warde.loyal.MainActivity.onCreate(MainActivity.java:32)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.app.Activity.performCreate(Activity.java:5389)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2256)
02-17 10:23:59.479: E/AndroidRuntime(3851): ... 11 more
02-17 10:23:59.479: E/AndroidRuntime(3851): Caused by: java.lang.reflect.InvocationTargetException
02-17 10:23:59.479: E/AndroidRuntime(3851): at java.lang.reflect.Constructor.constructNative(Native Method)
02-17 10:23:59.479: E/AndroidRuntime(3851): at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.view.LayoutInflater.createView(LayoutInflater.java:600)
02-17 10:23:59.479: E/AndroidRuntime(3851): ... 26 more
02-17 10:23:59.479: E/AndroidRuntime(3851): Caused by: java.lang.OutOfMemoryError
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:677)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:507)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:872)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.content.res.Resources.loadDrawable(Resources.java:3054)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.content.res.TypedArray.getDrawable(TypedArray.java:602)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.widget.ImageView.<init>(ImageView.java:133)
02-17 10:23:59.479: E/AndroidRuntime(3851): at android.widget.ImageView.<init>(ImageView.java:123)
02-17 10:23:59.479: E/AndroidRuntime(3851): ... 29 more
这是我实现 ViewFlipper
的代码。
public class MainActivity extends Activity {
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
private ViewFlipper mViewFlipper;
private AnimationListener mAnimationListener;
private Context mContext;
@SuppressWarnings("deprecation")
private final GestureDetector detector = new GestureDetector(new SwipeGestureDetector());
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mContext = this;
mViewFlipper = (ViewFlipper) this.findViewById(R.id.view_flipper);
mViewFlipper.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(final View view, final MotionEvent event) {
detector.onTouchEvent(event);
return true;
}
});
mViewFlipper.setAutoStart(true);
mViewFlipper.setFlipInterval(4000);
mViewFlipper.startFlipping();
//animation listener
mAnimationListener = new Animation.AnimationListener() {
public void onAnimationStart(Animation animation) {
//animation started event
}
public void onAnimationRepeat(Animation animation) {
}
public void onAnimationEnd(Animation animation) {
//TODO animation stopped event
}
};
}
class SwipeGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
try {
// right to left swipe
if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
mViewFlipper.setInAnimation(AnimationUtils.loadAnimation(mContext, R.anim.left_in));
mViewFlipper.setOutAnimation(AnimationUtils.loadAnimation(mContext, R.anim.left_out));
// controlling animation
mViewFlipper.getInAnimation().setAnimationListener(mAnimationListener);
mViewFlipper.showNext();
return true;
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
mViewFlipper.setInAnimation(AnimationUtils.loadAnimation(mContext, R.anim.right_in));
mViewFlipper.setOutAnimation(AnimationUtils.loadAnimation(mContext,R.anim.right_out));
// controlling animation
mViewFlipper.getInAnimation().setAnimationListener(mAnimationListener);
mViewFlipper.showPrevious();
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}
}
我想,也许我需要实施 AsynkTask
?
代码中应该更改什么。 ?
提前致谢...
编辑
main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ViewFlipper
android:id="@+id/view_flipper"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
android:src="@drawable/lightning" />
<TextView
style="@style/ImageTitle"
android:text="@string/lightning" />
</RelativeLayout>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
android:src="@drawable/color_baloons" />
<TextView
style="@style/ImageTitle"
android:text="@string/color_baloons" />
</RelativeLayout>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
android:src="@drawable/natural_wall" />
<TextView
style="@style/ImageTitle"
android:text="@string/natural_wall" />
</RelativeLayout>
</ViewFlipper>
</RelativeLayout>