我有一个Minion对象的ArrayList,当一个盾与一个minion碰撞时,我想从ArrayList中删除那个minion.但是,我只能让它以单向工作,而不是另一种方式.任何人都可以解释为什么?
在所有3个案例中,我使用Android的Renderer的onDrawFrame()方法...所以我无法控制何时调用它.但这里是所有3种方式的代码:
方法1 :(不起作用)
public void onDrawFrame(GL10 gl) {
List<Integer> indexesToRemove = new ArrayList<Integer>();
int len = minions.size();
for(int i=0; i<len; i++){
if( OverlapTester.overlapCircleRectangle( (Circle)shield1.bounds, (Rectangle)minions.get(i).bounds) ){ //this tests out to work just fine
indexesToRemove.add(i);
}
}
for(int i=indexesToRemove.size()-1; i>=0; i--){
minions.remove(indexesToRemove.get(i)); //<------ why doesn't this work?
}
}
Run Code Online (Sandbox Code Playgroud)
问题是最后一行minions.remove(indexesToRemove.get(i));不能实际删除小兵.它会被适当的索引调用.我已经通过调试器,直接向上运行,并且根本没有修改arraylist.为什么是这样?实际上,在调试器中,该行"minions.remove(indexesToRemove.get(i));" 被称为数十亿次.
方法2 :(仍然不起作用)
public void onDrawFrame(GL10 gl) {
synchronized(minions){
List<Integer> indexesToRemove = new ArrayList<Integer>();
int len = minions.size();
for(int i=0; i<len; i++){
if( OverlapTester.overlapCircleRectangle( (Circle)shield1.bounds, (Rectangle)minions.get(i).bounds) ){ //this …Run Code Online (Sandbox Code Playgroud) 我有一个方法,我想重构,它看起来(好吧,非常简化)像这样:
import com.sun.tools.javac.util.Pair;
private int foo(Pair<String, ?>... params) {
if (params[0].snd instanceof String) {
// do something
return 0;
} else if (params[0].snd instanceof ArrayList) {
// do something else
return 1;
}
return -1; // realistically in the code base, this line will never happen **edit: disregard this line
}
Run Code Online (Sandbox Code Playgroud)
所以我想我会做一些事情,比如把它分成两种方法,这样我就不用做类型检查了.(这是一个很好的重构吗?)
所以我想做这样的事情:
private int foo(Pair<String, String>... params) {
// do something
return 0;
}
private int foo(Pair<String, ArrayList>... params) {
// do something else
return 1;
}
Run Code Online (Sandbox Code Playgroud)
但编译器一直告诉我两种foo() …
所以,我经常听到"坚持静态活动或视图,特别是在长时间运行的AsyncTask中会导致内存泄漏并导致应用程序崩溃".
但是,我无法在Android模拟器中真正证明这一点.
我究竟做错了什么?
public class MainActivity extends AppCompatActivity {
static TextView label;
static List<Activity> sHolder = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewGroup vg = findViewById(R.id.blah);
for (int i=0; i<1000000; i++) {
ImageView im = new ImageView(this);
im.setImageDrawable(getApplicationContext().getDrawable(R.drawable.kitten_original));
vg.addView(im);
new MyTask(this).execute();
}
sHolder.add(this);
}
@Override
protected void onStart() {
super.onStart();
}
@Override
protected void onStop() {
super.onStop();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
class MyTask extends AsyncTask<Void, Void, Void> {
Activity activity;
public MyTask(Activity …Run Code Online (Sandbox Code Playgroud) Corona SDK的新手,我正在试图找出一种在模拟器上加载和保存文件(存储游戏数据)的方法.(我不想在真实设备上进行调试,每次只需要15秒才能看到变量).
我按照这里的教程:http://www.coronalabs.com/blog/2011/08/03/tutorial-exploring-json-usage-in-corona/ ,在找不到解决此问题的stackoverflow上找不到任何内容.
现在我有以下代码用于读取和存储文件:
local readJSONFile = function( filename, base )
-- set default base dir if none specified
if not base then base = system.ResourceDirectory; end
-- create a file path for corona i/o
local path = system.pathForFile( filename, base )
-- will hold contents of file
local contents
-- io.open opens a file at path. returns nil if no file found
local file = io.open( path, "r" )
if file then
-- read all …Run Code Online (Sandbox Code Playgroud) android ×2
java ×2
arraylist ×1
compilation ×1
coronasdk ×1
generics ×1
list ×1
lua ×1
mobile ×1
persistence ×1
refactoring ×1
type-erasure ×1