小编Dav*_* T.的帖子

ArrayList.remove(int)vs ArrayList.remove(Object)在不同的线程中

我有一个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)

java multithreading android list arraylist

1
推荐指数
2
解决办法
1万
查看次数

如何防止类型擦除?

我有一个方法,我想重构,它看起来(好吧,非常简化)像这样:

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() …

java generics refactoring compilation type-erasure

1
推荐指数
1
解决办法
134
查看次数

如何从Android内存泄漏强制崩溃?

所以,我经常听到"坚持静态活动或视图,特别是在长时间运行的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)

android memory-management android-activity android-memory

1
推荐指数
1
解决办法
234
查看次数

Corona SDK数据存储在模拟器上

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)

mobile lua persistence coronasdk

0
推荐指数
1
解决办法
1684
查看次数