我正在尝试创建一个程序来执行一个简单的任务,并每秒产生一个输出x.我还希望程序运行,直到我决定手动关闭程序.
我一直在尝试使用Swing计时器来实现它,因为我认为这是最好的方法.问题是我不确定一旦主方法执行完毕后如何保持程序运行.所以我举例说:
static ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
try {
//do stuff
} catch (Exception e) {
e.printStackTrace();
}
}
};
public static void main(String[] args) throws Exception{
Timer timer = new Timer(3000, taskPerformer);
timer.start();
}
Run Code Online (Sandbox Code Playgroud)
刚刚完成执行.我可以通过将当前执行线程置于睡眠状态来避免这个问题Thread.currentThread().sleep(..),但这感觉就像一个拙劣的工作,并且最终将持续有限.我也可以做(真的),但我相信这是不好的做法.
我的问题是如何获得所需的持久性行为,以及是否有比使用Swing计时器更好的方法.
谢谢.
将adMob广告添加到我的应用程序后,我注意到一些奇怪的记忆行为.在我的Android手机上,如果我去,Settings>Applications>Manage applications>myApp
我获取了我的应用程序的存储信息.
让我担心的是数据存储大约600kb,而Cache超过2.5MB(相比之下28kb和0kb最大值没有admob).经过一些试验和错误,我发现数据存储值似乎随着缓存而增加.如果我清除缓存并重新启动我的应用程序,数据值会显着下降,回到我对程序的期望.
我不知道这个缓存是做什么的,但它与adMob有关.我没有在我的程序中集成任何特定的缓存管理.我担心如果这个缓存内容一如既往地增长,那么如果我的应用程序开始占用10 + MB的空间,我的应用程序的用户将不会留下深刻的印象.我应该担心吗?可能是因为我没有做任何事情而是重复运行我的应用程序一天没有其他应用程序或程序将从缓存中取出我的数据?我应该手动清除缓存吗?关于Admob的目的是什么?
我有两个简单的活动A和B.用户开始B从A通过按压按钮,并且用户随后返回到A通过按下返回按钮.
在onDestroy()活动方法中,B我回收了活动中使用的一些背景图像B.我想要了解的是,当活动B再次开始时,我正在"尝试使用循环位图".当然位图将在onCreate()方法中再次加载?就像他们必须在活动第一次启动时一样.
这是我的示例代码:
public class ActivityB extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setContentView(R.layout.selectionpage);
}
@Override
public void onDestroy() {
ImageView iv = (ImageView) findViewById(R.id.imageView1);
((BitmapDrawable)iv.getDrawable()).getBitmap().recycle();
LinearLayout ll = (LinearLayout) findViewById(R.id.linearLayout1);
((BitmapDrawable)ll.getBackground()).getBitmap().recycle();
super.onDestroy();
}
}
Run Code Online (Sandbox Code Playgroud)
该代码我使用发射活动B从A
Intent intent = new Intent(ActivityA.this, ActivityB.class);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
selectionpage.XML:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/backgroundimage">
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/selectionimage"/> …Run Code Online (Sandbox Code Playgroud) 我有一个Android的益智游戏.当谜题开始时,我采取当前时间:
long startTime = System.currentTimeInMillis()
当玩家完成拼图时,我会再次花时间,减去开始时间并计算出已用时间.一切都好.
我的问题是应用程序中断时该怎么办.例如通过电话.此刻,拼图会自动保留在之前的状态(就像在视图中一样).但是,计算completionTime = currentTime - startTime现在无效.
我尝试使用保存已用时间onSaveInstaceState(Bundle).但onRestoreInstanceState(Bundle)重新进入应用程序时,不会调用其对应项.相反,该onResume()方法被调用?我读过这是因为应用程序没有被"杀死",而是仍然在内存中.在'杀'的情况下,我会想到View的状态也会丢失?我不认为在这种情况下跟踪视图是非常必要的,所以我也不会担心时间.
有没有办法从onResume()读取一个包,我应该只实现共享首选项吗?
我想避免更新游戏循环中的已用时间,因为这似乎效率低下.
这似乎是一个奇怪的问题,但我试图在几秒钟的间隔内发送尽可能多的HTTP POST请求.
我想知道是否有人有任何建议,因为我目前只实现了大约6-9个请求,这似乎相当低.我的代码如下 - 我使用的是Apache Commons HTTP库:
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
long start = System.currentTimeMillis();
long end = start + 4000;
int count = 0;
while (System.currentTimeMillis() < end)
{
count++;
httpClient.executeMethod(method);
}
System.out.println((double)count/4 + " reqs / sec");
Run Code Online (Sandbox Code Playgroud)
post方法事先创建一次:
String body= getBodyString();
PostMethod method = new PostMethod(Url);
method.setRequestEntity( new StringRequestEntity(body));
method.setRequestHeader(...etc)
Run Code Online (Sandbox Code Playgroud)
我猜是有某种固有的顺序行为,httpclient正在等待响应?在我的情况下,我不关心响应,所以可能有一种方法来提高通话率.也许我可以准备下一个请求,同时还有一个请求等等.还有一个更高效,更快速的库吗?
我是这类代码的新手,所以如果这个问题没有多大意义,我会道歉.