Java android中较低版本的应用程序未在较高版本中运行
我已经使用android SDK 2.2版本制作了我的应用程序,现在当我在android SDK 4.0.3上运行我的应用程序时,它没有运行 我已经在清单文件中给出了最小和最大sdk 我是android新手,希望能在更低版本和更高版本上运行我的应用程序。谁能告诉我怎么做。感谢您的帮助 飞溅类代码Java android中较低版本的应用程序未在较高版本中运行,java,android,debugging,android-2.2-froyo,Java,Android,Debugging,Android 2.2 Froyo,我已经使用android SDK 2.2版本制作了我的应用程序,现在当我在android SDK 4.0.3上运行我的应用程序时,它没有运行 我已经在清单文件中给出了最小和最大sdk 我是android新手,希望能在更低版本和更高版本上运行我的应用程序。谁能告诉我怎么做。感谢您的帮助 飞溅类代码 package com.Cricket_trivia.in; import android.app.Activity; import android.content.Intent; import an
package com.Cricket_trivia.in;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.MotionEvent;
public class SplashScreen extends Activity {
protected int _splashTime = 5000;
private Thread splashTread;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
final SplashScreen sPlashScreen = this;
// thread for displaying the SplashScreen
splashTread = new Thread() {
@Override
public void run() {
try {
synchronized(this){
wait(_splashTime);
}
} catch(InterruptedException e) {}
finally {
finish();
Intent i = new Intent();
i.setClass(sPlashScreen, K_trivia_cricketActivity.class);
startActivity(i);
stop();
}
}
};
splashTread.start();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
synchronized(splashTread){
splashTread.notifyAll();
}
}
return true;
}
}
编辑:我的日志
06-07 10:24:18.710: I/dalvikvm(1461): threadid=3: reacting to signal 3
06-07 10:24:18.760: I/dalvikvm(1461): Wrote stack traces to '/data/anr/traces.txt'
06-07 10:24:18.890: D/dalvikvm(1461): GC_FOR_ALLOC freed 45K, 4% free 6541K/6787K, paused 74ms
06-07 10:24:18.900: I/dalvikvm-heap(1461): Grow heap (frag case) to 7.333MB for 921616-byte allocation
06-07 10:24:19.010: I/dalvikvm(1461): threadid=3: reacting to signal 3
06-07 10:24:19.100: I/dalvikvm(1461): Wrote stack traces to '/data/anr/traces.txt'
06-07 10:24:19.140: D/dalvikvm(1461): GC_CONCURRENT freed <1K, 5% free 7440K/7751K, paused 5ms+5ms
06-07 10:24:19.240: D/dalvikvm(1461): GC_FOR_ALLOC freed 0K, 5% free 7440K/7751K, paused 97ms
06-07 10:24:19.240: I/dalvikvm-heap(1461): Grow heap (frag case) to 7.723MB for 409936-byte allocation
06-07 10:24:19.320: D/dalvikvm(1461): GC_FOR_ALLOC freed 0K, 5% free 7841K/8199K, paused 61ms
06-07 10:24:19.589: D/gralloc_goldfish(1461): Emulator without GPU emulation detected.
06-07 10:24:19.669: I/dalvikvm(1461): threadid=3: reacting to signal 3
06-07 10:24:19.779: I/dalvikvm(1461): Wrote stack traces to '/data/anr/traces.txt'
06-07 10:24:24.600: W/dalvikvm(1461): threadid=11: thread exiting with uncaught exception (group=0x409c01f8)
06-07 10:24:24.600: E/AndroidRuntime(1461): FATAL EXCEPTION: Thread-78
06-07 10:24:24.600: E/AndroidRuntime(1461): java.lang.UnsupportedOperationException
06-07 10:24:24.600: E/AndroidRuntime(1461): at java.lang.Thread.stop(Thread.java:1076)
06-07 10:24:24.600: E/AndroidRuntime(1461): at java.lang.Thread.stop(Thread.java:1063)
06-07 10:24:24.600: E/AndroidRuntime(1461): at com.Cricket_trivia.in.SplashScreen$1.run(SplashScreen.java:40)
06-07 10:24:26.209: D/dalvikvm(1461): GC_FOR_ALLOC freed 1037K, 15% free 7022K/8199K, paused 62ms
06-07 10:24:26.209: I/dalvikvm-heap(1461): Grow heap (frag case) to 7.509MB for 614416-byte allocation
06-07 10:24:26.440: D/dalvikvm(1461): GC_CONCURRENT freed <1K, 8% free 7621K/8199K, paused 4ms+5ms
06-07 10:24:26.610: I/dalvikvm(1461): threadid=3: reacting to signal 3
06-07 10:24:26.640: I/dalvikvm(1461): Wrote stack traces to '/data/anr/traces.txt'
06-07 10:24:18.710:I/dalvikvm(1461):threadid=3:对信号3作出反应
06-07 10:24:18.760:I/dalvikvm(1461):将堆栈跟踪写入“/data/anr/traces.txt”
06-07 10:24:18.890:D/dalvikvm(1461):释放45K的所有物质的总含量,4%释放6541K/6787K,暂停74ms
06-07 10:24:18.900:I/dalvikvm堆(1461):为921616字节分配将堆(frag大小写)增长到7.333MB
06-07 10:24:19.010:I/dalvikvm(1461):线程ID=3:对信号3作出反应
06-07 10:24:19.100:I/dalvikvm(1461):将堆栈跟踪写入“/data/anr/traces.txt”
06-07 10:24:19.140:D/dalvikvm(1461):GC_CONCURRENT freed你的应用程序在4.0.3而不是2.2上崩溃的原因很可能是因为你在UI线程上执行了一个昂贵的操作。以前版本的Android(即ICS之前的版本)不在乎您何时这样做,让您的应用程序按原样运行。但是,在4.0及更高版本中,如果您在UI线程上执行了可能代价高昂的操作(如网络连接等),操作系统会对此进行检查,并使您的应用程序崩溃
你基本上没有提供任何关于你的问题是什么的信息,所以我只能帮你解决这些问题
编辑:
这样行吗
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
Intent i = new Intent();
i.setClass(sPlashScreen, K_trivia_cricketActivity.class);
startActivity(i);
}
return true;
}
不要使用线程,因为这会在更高版本中产生问题。使用下面的代码显示启动屏幕
package com.Cricket_trivia.in;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.MotionEvent;
public class SplashScreen extends Activity {
protected int _splashTime = 5000;
private Thread splashTread;
MyCount counter = new MyCount(4000, 4000);
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
counter.start();
}
public class MyCount extends CountDownTimer
{
public MyCount(long csecond, long countDownInterval)
{
super(csecond, countDownInterval);
}
@Override
public void onFinish() {
finish();
Intent intent = new Intent();
intent.setClass(SplashScreen.this, K_trivia_cricketActivity.class);
startActivity(intent);
}
@Override
public void onTick(long arg0) {
// TODO Auto-generated method stub
}
}
}
I think it will work for you
“它不跑了”不会让它停下来。张贴日志。请解释“它没有运行”是什么意思。你看到启动器图标了吗?当你按下它时会发生什么事吗?logcat中是否有任何错误消息?您是否正在尝试建立任何网络连接?你的应用程序是否处理线程/异步任务?@AlexLockwood我已经使用线程在应用程序加载时显示启动屏幕从manifast删除android:targetSdkVersion=“integer”,然后重试可能会工作…我的日志猫当我在4.0.3版本中运行我的应用程序时,你需要向我们提供一些代码。从你发布的日志中没有什么可以告诉你的。解决方法是将你的活动
中的线程一起去掉。它们对于您正在尝试做的事情是不必要的。执行onTouchEvent()
时,只需调用startActivity()
。在调用startActivity()
之前调用finish()
也没有多大意义。据我所知,您可能不想让您的代码调用finish()
。@师傅,我觉得这完全是一个黑客行为。你应该理解你的代码是如何工作的,而不是仅仅因为它没有崩溃就假设它工作正常。为什么你一开始就需要线程/定时器?@AlexLockwood在完成这项工作后,应用程序在更高版本中运行良好,我不知道我们是否应该在splash中使用定时器/线程。你能解释一下为什么选择使用定时器/线程吗?你的应用程序没有崩溃并不意味着你做错了。就我所知,上面的代码相当于使用sleep(4000)
来避免比赛条件……这对那些稍后回到这个问题寻求类似问题答案的人来说是公平的。我强烈不同意这个答案,即使它对OP有效。很抱歉,如果它导致-2分,但我不希望人们在他们的应用程序中做类似的事情,认为这是正确的答案。我高估了你的几个顶级答案。。。我希望这能弥补它:)。